[英]Which configuration do I need to use an external DLL in a WinForms application?
我正在使用外部DLL来使用我编写的包装器来使用OCR设备。 我已经对包装器进行了测试,效果很好。 但是,当我使用WinForms项目来使用包装器的客户端类(位于另一个项目)时,调用从DLL导入的C#方法时出现错误(使用[DLLImport(...)]
),说DLL是未注册。
错误说:
“找不到DLL库函数。检查注册表安装路径。”
所有执行都是在调试模式下完成的。 我比较了两个项目的配置。 最相关的区别是Test项目面向Any CPU和WinForms app只指向x86。
会是什么呢?
更新
Regsvr32.exe
注册该DLL,但它不起作用。 我想过使用Gacutil.exe
但是需要卸载.net framework 1.1以外的所有框架... ObjectContext
的调用加载组合框并再次出现错误时...我正在使用连接到Oracle的实体框架。 我有一个理论。
让我们假设以下情况:
然后,在运行时,可能会发生这种情况:
欢迎来到DLL地狱。 所以,你可以做什么?
因此,对DLL的调用只能从一个按钮进行,但它不适用于复杂的形式。 我会说有一个未定义的行为正在发生。 问题仍然是你是不是写错误的编组,或者编写错误的DLL。
由于我们无法访问DLL的源代码,您可以发布函数的原型,所有相关的结构定义以及您为其编写的DllImport行吗?
谷歌无法找到错误信息,这意味着(不是绝对:) :)它不是系统消息,而是来自dll代码的自定义消息。 所以dll做了一些狡猾的事情。 我想它会尝试在内部将您的调用重新调度到另一个函数。
我建议你尝试的几件事情:
运行x86配置。 在项目属性 - >构建选项卡中,将平台设置为x86。 这假设dll是x86 dll。
dumpbin / headers orc.dll
File Type: DLL FILE HEADER VALUES 14C machine (**x86**) 4 number of sections 4CE7B6FC time date stamp Sat Nov 20 11:54:36 2010 0 file pointer to symbol table 0 number of symbols E0 size of optional header 2102 characteristics Executable 32 bit word machine DLL
这个命令行应该告诉你位数。 如果它是64位运行64位配置,但我敢打赌它是32位。
其中ocr.dll
应该告诉你dll在哪里。 如果它没有将安装dll的文件夹添加到%PATH%。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.