ainatipen 发表于 2021-12-26 22:09

在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文件的内容:
LIBRARYEXPORTS   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.dllMacOS.bundleAndroid.soiOS.a
库文件的生成和使用,可以参考
https://www.cnblogs.com/garsonlab/p/9992144.html
值得参考的实例:


https://github.com/Unity-Technologies/NativeRenderingPlugin.git
页: [1]
查看完整版本: 在Unity中调用Native dll