.NET类作为COM DLL中的回调对象

时间:2012-02-21 18:59:33

标签: vb.net com

我是Windows编程和VB.net的相对新手。我们要做的是在现有的第三方COM dll中调用函数。此函数需要一个回调参数,其类型是也在dll中定义的接口。

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

我怀疑有一个简单的解决办法,但到目前为止,我找到解决方案的努力已经缩短了。如果有人能指出我正确的方向,我将非常感激。

非常感谢。

1 个答案:

答案 0 :(得分:0)

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

代理/存根案例:

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

Typelibrary案例:

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

用你的类型库中的guid替换{F37C8060-4AD5-101B-B826-00DD01103DE1}。

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