繁体   English   中英

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

[英]DLL Works with tlbimp, but not regsvr32.exe

我在静态库 (C++) 中有一个用 MFC 制作的 .dll。 我正在尝试在通用应用程序(C#)中使用它。 我无法在通用应用程序中引用 .dll,因为出现错误:“无法解析 COM 引用。类型库导入程序在类型验证期间遇到错误。”

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

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

新的 .dll 可以从我的通用应用程序中引用,我可以使用它的对象和函数。 该程序成功编译,但是当我运行该程序时,当我从 . dll。

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

我怀疑 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 静态不兼容。

UPDATE2:我认为问题可能与通用应用程序有关,所以我制作了一个控制台应用程序,并进行了相同的调用。 这次的错误是:“由于以下错误,检索具有 CLSID 的组件的 COM 类工厂失败:8007007e 找不到指定的模块。”

不要这样做:汉斯说这会影响注册! UPDATE3:我成功地在 tlbimp .dll 上使用了 RegAsm(它说“类型注册成功”)。 但是,我在运行时仍然收到相同的错误:Creating an instance...failed due to..Class notregistered。

.dll 依赖于其他 .dll,所以当它告诉我模块丢失时,这真的意味着丢失了一个不同的模块(我的 .dll 依赖的那个)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM