最后编辑于2024年11月11日
前言
之前需要调用dll里面的图标,而调用的函数用的是一个dll的内部的函数,所以这里记录一下调用的两种方法。
VS的项目引用
在VS的方案资源管理器里面(Ctrl+Alt+L),右键依赖项 - 添加项目引用,然后选择dll文件,例如AddDll.dll(里面有一个ADD类,ADD里面有一个calculate公共方法)。
之后就可以在依赖项 - 程序集里面看到Add了。
调用也很简单:
| |
使用DllImport
在需要引用的函数的上一行添加[DllImport("user.dll", ......)]就行,下面是我调用的获取dll图标函数:
| |
后面那个CharSet = CharSet.Auto是调用字符集,Auto是自动选择合适的。
下面函数的定义记得加static extern,以表示这个是一个外部方法实现,它将在运行时解析到指定的非托管代码。
这个方法需要知道dll内部的函数及其形参。
补充其它的DllImportAttribute属性
EntryPoint="MessageBoxA",这个可以也指定函数,这样下面的函数引用就可以用别的名字,但是注意这个EntryPoint赋值和下面的函数引用不一定相同,比如上面的ExtractIcon,在EntryPoint里面应该是ExtractIconW。ExactSpelling指示EntryPoint是否必须与指示的入口点的拼写完全匹配,如:ExactSpelling=false;PreserveSig指示方法的签名应当被保留还是被转换, 如:PreserveSig=true;SetLastError指示方法是否保留 Win32"上一错误",如:SetLastError=true;CallingConvention指示入口点的调用约定, 如:CallingConvention=CallingConvention.Winapi;