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

DLL Works with tlbimp, but not regsvr32.exe

我有一个用 MFC 在静态库 (C++) 中制作的 .dll。我正在尝试在通用应用程序 (C#) 中使用它。我无法在通用应用程序中引用 .dll,因为出现以下错误:"Could not resolve COM Reference. The type library importer encountered an error during type verification."

我在这里找到了解决方案: The type library importer encountered an error during type verification 并在我的 .dll 上使用 tlbimp。它成功弹出了一个新的.dll,但给出了警告:"Importing a type library into a platform agnostic assembly. This can cause errors if the type library is not truly agnostic"

注意:原始 .dll 为 3,000 kb,而 tlbimp .dll 只有 13 KB。我怀疑我丢失了 MFC 部分,可能更多。

新的 .dll 可以从我的通用应用程序中引用,我可以使用它的对象和函数。程序成功编译,但是当我 运行 程序时,我得到 运行time 错误: "Creating an instance of the COM component with CLSID using CoCreateInstanceFromApp failed due to the following error: 80040154 Class not registered" 当我从 .dll 声明一个对象时。

注意:调用是IHdevice device=new Hdevice();其中 IHdevice 是一个接口,Hdevice 是 coclass

我怀疑 tlb 库从未注册过,所以我尝试使用 regsvr32 注册,但是当我注册时出现错误:

"the module Lib.dll was loaded but the entry-point DllRegisterServer was not found"

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

提前致谢!

更新:我尝试在原始 .dll 上使用 regsvr32,它说 "the module failed to load." 我找到了 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: 我认为问题可能与通用应用程序有关,所以我制作了一个控制台应用程序,并进行了同样的调用。这次错误是:"Retrieving the COM class factory for component with CLSID failed due to the following error: 8007007e The specified module could not be found."

不要这样做:汉斯说它会破坏注册! 更新3: 我在 tlbimp .dll 上成功使用了 RegAsm(它说 "types registered successfully")。但是,我在 运行 时仍然收到相同的错误:创建实例...由于..Class 未注册而失败。

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