admin 管理员组文章数量: 1184232
2024年3月9日发(作者:有什么基础才能学vue)
C#_DllImport用法和路径问题
DllImport是pServices命名空间下的一个属性类,其功能是提供
从非托管DLL导出的函数的必要调用信息。
DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。
DllImport的定义如下:
[AttributeUsage()]
publicclassDllImportAttribute:ute
{
publicDllImportAttribute(stringdllName){…}//定位参数为
dllName
publicCallingConventionCallingConvention;//入口点调用约定
publicCharSetCharSet;//入口点采用的字符接
publicstringEntryPoint;//入口点名称
publicboolExactSpelling;//是否必须与指示的入口点拼写完全一
致,默认false
publicboolPreserveSig;//方法的签名是被保留还是被转换
publicboolSetLastError;//FindLastError方法的返回值保存在
这里
publicstringValue{get{…}}
}
用法示例:
[DllImport("kernel32")]
privatestaticexternlongWritePrivateProfileString(string
section,stringkey,stringval,stringfilePath);
以上是用来写入ini文件的一个win32api。
用此方式调用Win32API的数据类型对应:DWORD=int或uint,BOOL=bool,预定义
常量=enum,结构=struct。
DllImport会按照顺序自动去寻找的地方:
1、exe所在目录
2、System32目录
3、环境变量目录
所以只需要你把引用的DLL拷贝到这三个目录下就可以不用写路径了或者可以这样
h(.bin*.dll)
Web中的,同时也是应用程序中的
后来发现用[DllImport(@"C:")]这样指定DLL的绝对路径就可以正常装
载。
这个问题最常出现在使用第三方非托管DLL组件的时候,我的也同样是这时出的问
题,m的官方解决方案如下:
首先需要确认你引用了哪些组件,那些是托管的,哪些是非托管的.托管的很好办,直接被使用
的需要引用,间接使用的需要拷贝到bin目录下.非托管的处理
会比较麻烦.实际上,你拷贝到bin没有任何帮助,因为CLR会把文件拷贝到一个临时目录下,
然后在那运行web,而CLR只会拷贝托管文件,这就是为什
么我们明明把非托管的dll放在了bin下却依然提示不能加载模块了.
具体做法如下:
1、首先我们在服务器上随便找个地方新建一个目录,假如为C:DLL
2、然后,在环境变量中,给Path变量添加这个目录
版权声明:本文标题:C# DLLIMPORT用法和路径 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1709987562a552411.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论