美文网首页
在Unity中调用Native dll

在Unity中调用Native dll

作者: LEO_青蛙 | 来源:发表于2021-12-25 15:43 被阅读0次

在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

相关文章

网友评论

      本文标题:在Unity中调用Native dll

      本文链接:https://www.haomeiwen.com/subject/etksqrtx.html