在Unity中调用Native dll

在Unity中调用Native dll,需要通过PInvoke的方式

详细的操作步骤可以参考
https://zhuanlan.zhihu.com/p/30746354

遇到的问题

1、EntryPointNotFoundException

EntryPointNotFoundException

下载最新的 Dependency Walker 用来进行查看我们生成的dll里面的函数签名。
dll里面的函数签名

因为在C++中存在函数的重载,允许函数重名,因此在编译器生成dll的时候,为了区别重名的程序,会将其进行一定算法进行名称转换。

解决办法:
(1)添加EntryPoint参数


添加EntryPoint参数

(2)在VS项目中添加一个def文件


添加def文件

def文件的内容:

LIBRARY
EXPORTS
     Add

在链接器选项中选中使用的def文件


在链接器选项中选中使用的def文件

指定def文件后,函数名称不会进行转换


指定def文件后的函数名称

2、在MacOS中使用Unity进行调试
(1)DllNotFoundException
在iOS中,插件被静态链接到可执行文件中,所以我们必须使用__Internal作为库名。
https://docs.unity3d.com/Manual/NativePlugins.html
(2)EntryPointNotFoundException
Native dll不能在macOS中使用,需要将C++代码放在Xcode中生成.bundle文件使用。

CppInterface.bundle

Unity具有跨平台特性,所以一般使用C++分为四种情况:

平台 库文件
Windows .dll
MacOS .bundle
Android .so
iOS .a

库文件的生成和使用,可以参考
https://www.cnblogs.com/garsonlab/p/9992144.html

值得参考的实例:

https://github.com/Unity-Technologies/NativeRenderingPlugin.git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Unity插件分为两种:托管插件(Managed Plugins)和本地插件(Native Plugins)。本文...
    Sheh伟伟阅读 14,322评论 3 31
  • 《腾讯桌球:客户端总结》 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东...
    吴秦阅读 25,067评论 12 142
  • 本文原创版权归 博客园吴秦所有,此处纯粹技术收藏,如有再转,敬请于显示位置标明原创作者及出处,以示尊重!! 作者:...
    Magic_Dong阅读 10,039评论 0 7
  • 历史 在Unity 2017.1之前,Unity使用的是一个相当于.NET 3.5的runtime,多年未更新。 ...
    勤奋happyfire阅读 6,556评论 0 1
  • 原文地址 http://www.fx114.net/qa-75-172454.aspx 使用Profiler工具...
    IongX阅读 11,279评论 1 11

友情链接更多精彩内容