如何在VB6中引用COM .tlb文件中的对象和方法?

时间:2010-09-28 17:33:36

标签: vb6 com-interop

背景:我们有一个用C#编写的COM对象。我们正在与另一家拥有用VB6编写的代码的公司合作。我们需要发送VB6代码来创建和调用COM对象中的对象/方法。

我使用Microsoft提供的RegAsm.exe从C#COM DLL文件创建了一个.tlb文件。然后我在VB6中添加了这个.tlb文件作为参考(Project-> References-> Browse ...)。它还在可用参考下检查。它未注册为COM +。

我使用这篇文章(C#/VB6 COM Example)作为所有这些的参考。

问题:问题是我在VB6项目中引用了这个COM对象,但没有出现任何对象/方法/命名空间。我必须有一些简单的东西,但它是什么?我需要将其注册为COM +,还是其他问题?

编辑:有关该项目的更多信息
好的,所以我现在可以访问源代码,但显然我错了。它是用C ++编写的,而不是C#。我们的C ++ COM对象测试应用程序是在C#中,但COM对象本身是C ++。

现在,我的新问题是如何与此C ++ DLL进行交互。我的大学提到它“不是一个真正的COM对象”,除了添加它作为参考之外,有没有办法与它进行交互?如果没有,那么如何将其变成COM对象呢?

我需要访问和使用函数以及此DLL中的对象。

1 个答案:

答案 0 :(得分:2)

听起来你的C#类没有合适的接口......在C#中创建一个合适的类型库你需要为你的对象创建一个接口。否则,对象将出现在VB6中,正如您所描述的那样:

[Guid("0C3A05D1-ADF0-4d82-84BC-B59A1AEF6235")]
public interface ISomeClass
{
    [DispId(1)]
    string Foo { get; }

    [DispId(2)]
    string Bar { get; }

    [DispId(3)]
    bool Baz { get; }

}

[Guid("59EA6033-9BF3-4123-B163-9AD1F958E179"),
 ProgId("SomeModule.SomeClass"),
 ClassInterface(ClassInterfaceType.None)]
public class SomeClass : ISomeClass
{

     public string Foo 
     {
         get 
         {
             return _foo;
         }
     }
 // More implimentation
 ...

有关详细信息,请参阅此code project article