DLL适用于tlbimp,但不适用于regsvr32.exe



我有一个用MFC在静态库(C++(中创建的.dll。我正在尝试在通用应用程序(C#(中使用它。我无法在通用应用程序中引用.dll,因为我收到错误:"无法解析COM引用。类型库导入程序在类型验证过程中遇到错误。">

我在这里找到了解决方案:类型库导入程序在类型验证过程中遇到错误并在我的.dll上使用tlbimp。它成功地弹出了一个新的.dll,但给出了一个警告:"将类型库导入到平台不可知的程序集中。如果类型库不是真正的不可知的,这可能会导致错误">

注意:原始.dll是3000 kb,而tlbimp.dll只有13 kb。我怀疑我正在失去MFC的部分,可能更多。

新的.dll可以从我的通用应用程序中引用,我可以使用其中的对象和函数。该程序成功编译,但当我运行该程序时,我收到运行时错误:当我从.dll声明对象时,"使用CoCreateInstanceFromApp创建CLSID的COM组件的实例失败,原因是以下错误:80040154 Class not registered"。

注意:调用为IHdevice device=new Hdevice((;其中IHdevice是接口,Hdevice是共类

我怀疑tlb库从未注册过,所以我尝试用regsvr32注册,但当我注册时,我得到了错误:

"已加载模块Lib.dll,但找不到入口点DllRegisterServer">

我确信原始的.dll有一个DllRegisterServer函数,并且也是在.def文件中定义的。但我认为当我使用tlbimp时,它会丢失。有没有办法同时注册和tlbimp?你还有其他建议吗?

提前感谢!

更新:我尝试在原始.dll上使用regsvr32,它显示"模块加载失败"http://csi-windows.com/blog/all/73-windows-64-bit/378-fixing-qregsvr32-the-module-failed-to-load-the-specified-module-could-not-be-foundq这似乎是同一个问题,但我已经做了所有的解决方案。我尝试将dll放入SysWOW64中,然后尝试。我尝试将dll放入System32,然后尝试。我尝试将regsvr32移到同一目录中,然后尝试。每次都找不到.dll.

我想问:.dll必须是COM可见的才能工作吗。我不相信我在任何地方让.dll COM可见,我也不能,因为我需要/clr,它与MFC静态不兼容。

更新2:我想问题可能与通用应用程序有关,所以我制作了一个控制台应用程序,并进行了同样的调用。这次的错误是:"检索CLSID组件的COM类工厂失败,原因是以下错误:8007007e找不到指定的模块。">

不要这样做:汉斯说这会扼杀注册!更新3:我在tlbimp.dll上成功地使用了RegAsm(上面写着"类型注册成功"(。然而,我在运行时仍然收到同样的错误:正在创建一个实例。。。由于..类未注册而失败。

.dll依赖于其他.dll,所以当它告诉我模块丢失时,实际上意味着丢失了另一个模块(我的.dll所依赖的模块(。

相关内容

最新更新