背景:我们有一个用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中的对象。
答案 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。