【问题标题】:DLL Works with tlbimp, but not regsvr32.exeDLL 适用于 tlbimp,但不适用于 regsvr32.exe
【发布时间】:2015-07-06 19:12:18
【问题描述】:

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

我在这里找到了解决方案: The type library importer encountered an error during type verification 并在我的 .dll 上使用 tlbimp。它成功弹出一个新的 .dll,但给出警告:“将类型库导入与平台无关的程序集中。如果类型库不是真正无关的,这可能会导致错误”

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

可以从我的通用应用程序中引用新的 .dll,并且我可以使用其中的对象和函数。程序编译成功,但是当我运行程序时,出现运行时错误: “使用 CoCreateInstanceFromApp 创建具有 CLSID 的 COM 组件实例失败,原因是以下错误:80040154 未注册类”当我从 .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 静态不兼容。

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

不要这样做:汉斯说它会杀死注册! 更新3: 我在 tlbimp .dll 上成功使用了 RegAsm(它说“类型注册成功”)。但是,我在运行时仍然收到相同的错误:创建实例...失败,因为...类未注册。

【问题讨论】:

  • 我觉得你需要注册原始的dll。我认为 TlbImp 输出的文件只是一个包装器。
  • 你需要停止尝试,它不会起作用。通用应用程序在沙盒中运行,仅考虑包清单中的服务器。所有非常有意识的、平板电脑和电话用户都没有机会解决 DLL Hell 问题。你演示得很好的那种问题,UPDATE3破坏了注册,你必须重新安装它。也许 C++/CX 包装器仍然可以使代码有用,这取决于。
  • @HansPassant 你可能是对的。但是假设我只想在一个简单的控制台程序中使用它 -Update 2- 发生了什么?为什么找不到模块。我每天在 Windows 7 上运行该程序,它可以工作,我使用 Windows 10 SDK 进行了重建。
  • @HansPassant 我的目标是将通用应用程序与通用驱动程序集成。你会怎么做呢?我唯一的另一个想法是用 C++ 编写整个东西

标签: c# c++ com mfc win-universal-app


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 2021-02-25
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2017-06-20
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多