使用C#的DllImport属性标签好久了,今天再次使用脑海里忽然冒出了几个疑惑点,带着问题去找答案~
-
Q: DllImport使用方法与注意事项
-
A:
- 方法级属性标签,用在方法声明前面
- 单个定位参数,dllName(string类型),相当于构造函数参数,必须指定
- 用 DllImport 属性修饰的方法必须具有 extern 修饰符
-
ref:
-
Q: DllImport指定dll名时是否要加后缀,为啥有的加有的不加
-
A: 根据Mono文档记载,[DllImport(“”)]中写入的字符串是文件名去除平台后缀+平台前缀的剩余部分;譬如一个工程名为 cocoshit_2.0.0,在win下就是cocoshit_2.0.0.dll,linux下为libcocoshit_2.0.0.so, mac下是 libcocoshit_2.0.0.dylib,而写进代码中只要[DllImport(“cocoshit”)]即可,DllImport为自动添加前后缀。(方便跨平台)
但是,如果库名称中已经包含了(.)的话,例如libgtk-win32-2.0-0.dll,Windows就不会自动添加.dll后缀,会导致DllNotFoundException。此时,就必须自行补全dll的全名。 -
ref:
-
Q:DllImport对so与dll都有效,那么dll与so的区别?
-
A:初级理解,共享对象so(shared object)与动态链接库dll(dynamic link library)是同一概念,都是程序运行时动态加载的链接库。不同的是,so是linux系统下的格式(包括Android),dll是windows系统下的格式。
-
ref:
-
Q: 没有给出dll,给到的是lib;Unity无法加载?
-
A:按我的理解,lib静态库,unity可以识别的情况下会自动打包到程序中,尚未验证;至于调用方法,参考链接中老哥给出了一个方案~
-
ref: