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

Unity3D笔记(十六)在Unity中导入C/C++编写的DLL

[复制链接]
发表于 2022-4-11 12:59 | 显示全部楼层 |阅读模式
问题描述: 最近项目中需要导入一个C语言封装好的DLL,由于之前没接触过相关操作,直接导入工程添加引用,结果报错“未能添加对”XXXX.dll“的引用。请确保文件可访问并且是一个有效的程序集或COM组件”。网上搜索,原因为此DLL为非托管的DLL。

托管DLL:完全由.NET托管代码实现的dll,完全依赖于.NET平台的CLR运行。托管dll受.NET CLR管控,支持内存自动回收等的,对于.NET平台是安全dll(用.net代码实现的dll,可以是用C#, VB.NET,F#等实现的)

非托管DLL:是指完全或者部分不是用.NET代码实现,不依赖于.NET平台即可运行,例如COM方式的dll,不支持自动回收内存,对于.NET平台而言,也是非安全可控的。(完全不是或部分不是用.net代码实现的dll,可能是C/C++实现)。

解决方式:
非托管的DLL只能使用DllImport方式导入,新建一个类,通过这个类去调用dll中的方法。
public static class DllImport{       [DllImport("dll名", EntryPoint = "方法名", CallingConvention = CallingConvention.Cdecl)]        public static extern int Init(//有参数添加参数);            [DllImport("dll名", EntryPoint = "Release", CallingConvention = CallingConvention.Cdecl)]        public static extern void Release();}
此种方式下,需要用到哪些方法就需要写几个上面的导入方法,其中”dll名“无需添加后缀,EntryPoint为你需要导入的dll中的方法名,CallingConvention为调用约定,关于调用约定可以参考 https://blog.csdn.net/yaokang522/article/details/49382945
public后接的返回值类型为dll中方法的返回值类型,方法名可自定,无需与dll中的方法名一致,若有dll中方法有参数,则添加相印参数即可。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-22 15:35 , Processed in 0.150310 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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