将COM组件引用添加到VB.NET项目时出现问题
我有一个第三方COM dll,我正在尝试将其添加到vb.net(2008 Express)项目中。我将dll放在C:\ WINDOWS \ system32 \中,并使用" regsvr32 vxncom.dll"进行了注册。当我转到项目>添加引用并转到COM选项卡时,它会显示在可用组件/库的列表中。但是,当我选择库并单击"确定"时,Visual Studio抱怨:"无法添加对'vxncom 4.0库'的引用。无法注册ActiveX类型库'C:\ WINDOWS \ system32 \ vxncom.dll'。"
我正在执行的项目是分发dll的人们提供的示例。当我启动一个新的(空白)vb.net项目时,也无法添加该组件。
更新1:
我在有问题的dll上运行了依赖项沃克,这是我在错误日志中得到的内容:
错误:由于隐式相关模块中缺少导出功能,因此至少一个模块的导入无法解析。
该模块似乎是libeay32.dll,但它已经存在于C:\ WINDOWS \ system32中。
更新2:
我去了openssl网站并下载并使用其安装程序来更新libeay32.dll。我再次在vxncom.dll上运行了依赖遍历器,并且没有错误。回到Visual Studio,它仍然不想添加参考。与以前完全一样的错误。
解决方案
也许DLL VB试图注册取决于另一个不存在的DLL。我们可以使用http://www.dependencywalker.com/中的免费Dependency Walker工具来确认(或者排除它)
响应更新1:
听起来好像系统上安装的libeay32.dll版本与组件期望的版本不匹配-depends表示组件正在寻找的功能不存在。我将检查libeay32的版本号,然后与供应商联系并询问他们所支持的版本。
如果我们使用tlbimp.exe创建自己的PIA,而不是依靠IDE帮我们做,则可能会得到更详细的错误消息。
假设我们还没有解决它,或者已经转向其他选择;然后从jeffm的答案是libeay32.dll正确注册到操作系统?重新安装/修复通常可以解决该类型的问题(我在MS Office和MapPoint中看到了很多,其中COM对象有时出于某种原因而自行注销)。