调用C#COM对象

时间:2009-09-26 20:37:46

标签: c# com

好的,我已经创建了一个c#dll,使其所有接口和方法都是ComVisible(true)。使用gacutil将其添加到GAC,然后使用regasm注册它并创建类型库tlb文件。

现在我有另一个c#项目,我想调用该com对象,我该怎么做?导入com对象然后使用其调用的代码大致是什么样的?

3 个答案:

答案 0 :(得分:1)

首先,你为什么要通过COM在你的另一个C#项目中调用那个C#程序集(你已经明了)?那不是必要的......

Ontopic: 如果你已经创建了一个tlb文件,那么你不应该做任何特别的事情。您可以只引用您创建的c#程序集的“运行时可调用包装器”。

答案 1 :(得分:1)

第1步:创建一个Runtime-Callable-Wrapper。

有两种方式

方法1:使用TlbImp生成RCW

tlbimp <YourCOMSvr>.tlb /out:<YourCOMSvr>.dll

使用这种方式使用默认的.NET-Interop编组,有时(当它不起作用时的意思)你需要通过执行附加步骤来改变编组

ildasm <YourCOMSvr>.dll /out:<YourCOMSvr>.il
//Modify <YourCOMSvr>.il 
ilasm <YourCOMSvr>.il /dll

方法2:手动创建C ++ / Cli项目,作为COM服务器的包装器

第2步:C#代码

引用RCW并使用以下代码连接到COM服务器

Type yourComType= Type.GetTypeFromProgID(yourComSvrProgID, serverPcName);
var oInterface = (IYourCOMInterface)Activator.CreateInstance(yourComType);
//Then start using oInterface 

答案 2 :(得分:-2)

当您的C#组件成为COM限定组件时,它也会像合格的ActiveX组件一样运行。

因此,测试COM调用的简单方法是编写一个简单的HTML页面使用下面给出的JavaScript代码:

Set MyCOMObj = Server.CreateObject("NAME_OF_COM_EXPOSED_CLASS"); 
MyCOMObj.My_COM_Method();

如果你能够在没有任何错误的情况下调用这样的方法,那就意味着你的COM调用工作正常。

谢谢和问候
Anugrah Atreya
http://explorecsharp.blogspot.com