找回密码
 立即注册
查看: 365|回复: 0

在Unity中调用Native dll

[复制链接]
发表于 2021-12-26 22:09 | 显示全部楼层 |阅读模式
在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.dll
MacOS.bundle
Android.so
iOS.a

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 23:31 , Processed in 0.089206 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表