【问题标题】:.NET class as callback object in COM DLL.NET 类作为 COM DLL 中的回调对象
【发布时间】:2012-02-21 18:59:32
【问题描述】:

我是 Windows 编程和 VB.net 的新手。我们正在尝试做的是在现有的第 3 方 COM dll 中调用一个函数。这个函数需要一个回调参数,它的类型是一个同样在dll中定义的接口。

在我们的 VB.net 应用程序中,我们添加了 dll 作为 COM 引用,并创建了一个在 DLL 中实现接口的类。然后我们发送一个该类型的对象作为回调参数。这编译得很好。但是,当我们运行应用程序时,我们会收到一条错误消息,指出程序无法将对象从我们现有的类型转换为接口类型。

我怀疑有一个简单的解决方案,但到目前为止,我寻找解决方案的努力都失败了。如果有人能指出我正确的方向,我将不胜感激。

非常感谢。

【问题讨论】:

标签: vb.net com


【解决方案1】:

我建议您检查您正在实现的 COM 接口是否具有注册的代理/存根或对应的类型库 (tlb)。您可以通过在注册表中搜索接口的 IID(这是与此接口关联的 guid)来检查这一点:

代理/存根案例:

HKEY_CLASSES_ROOT
   Interface
      {iid}
         (Default) = ICustomInterfaceName
         ProxyStubClsid32 = {clsid}

类型库案例:

HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1}
HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1}\2.0 = Automation Hello 2.0 Type Library.
HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1}\2.0\HELPDIR =
; U.S. English.
HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1}\2.0\9\win32 = hello.tlb

将 {F37C8060-4AD5-101B-B826-00DD01103DE1} 替换为与您的类型库相关的 guid。

如果类型库已注册。检查其文件是否存在于您的 PC 上

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2021-03-19
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多