1.搭建了一个winform项目,需引用SDK文件
2.项目调试时后报错无法找到DLL模块。
图中c:\termb.dll是为了显示报错信息故意加的错误路径。实际报错时如果你引用了路径那么会显示路径信息,反之显示的是DLL名称。
3 .DLL引用可以选择项目—添加引用
或者通过图1的 [ DllImport()]方式导入。区别在于该DLL文件是否是由.NET平台编译的。如果是则可以用直接添加引用的方式添加。不是则手动导入。
手动导入:1.除了在代码中声明外,还需要将DLL文件放入应用程序目录,这里我放入的是DEBUG文件下。网上也有说放入BIN目录下
2.放入system32目录下
3.在[ DllImport()]中 使用绝对路径或相对路径指向DLL文件:
[DllImport(@"c:\Termb.dll", EntryPoint = "CVR_InitComm", CharSet = CharSet.Ansi, SetLastError = false)]
public static extern int CVR_InitComm(int Port);`
4 .如果报错信息为 :system.badimageformat
这是由于发布平台和DLL的位数不同所造成的。DLL的位数可以通过notepad或VS命令符进行查看。
notepad:打开DLL文件,设置为utf-8编码。查找PE 字符。PExxxxxxD为64位,PExxxxxL为32位
VS命令:输入corflags +DLL或dumpbin /headers XXX.dll
然后将项目的发布平台设置为对应的位数。
网上其他的解决方案说的是设置目标平台,但我测试后没有用。便在这里将两个平台都设置了,之后通过了。(= -= 所以anycpu的意义呢)
6.另一个项目引用了该项目。报错“引用程序集面向是另一个处理器”
因为该解决方案的其他项目与这个项目的平台不同,将之设置为同一平台就可以解决了。
其实关于DLL引用和发布平台的各种适应情况还有很多不甚了解。大家可以补充。