调用C#的COM对象(Calling C# COM object)

2019-07-19 17:59发布

好吧,我已经创建了一个C#DLL,做出了所有的接口和方法都标记有ComVisible特性(真)。 它添加到GAC使用GACUTIL,然后使用regasm注册,并创建了一个类型库TLB文件。

现在,我有我想要到COM对象调用另一个C#项目,我该怎么办呢? 什么将代码大致模样导入然后COM对象使用其电话?

Answer 1:

首先,你为什么要调用C#大会(您做了标记有ComVisible特性)在通过COM的其他C#项目? 这是没有必要的...

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



Answer 2:

第1步:创建一个运行时可调用的包装器。 有两种方法

方法1:使用TLBIMP来生成RCW

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

使用这种方法是使用默认的.NET互操作编组,有时(意思是当它不工作),你需要改变编组由执行额外的步骤

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 


Answer 3:

那一刻你的C#组件变成了COM组件合格,它也开始表现得像一个合格的ActiveX组件。

所以,一个简单的方法来测试COM调用将低于给出编写的JavaScript代码的简单的HTML页面:

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

如果你能够调用这样的方法没有任何错误,这意味着你的COM调用正在完善。

感谢致敬
Anugrah阿特雷亚
http://explorecsharp.blogspot.com



文章来源: Calling C# COM object
标签: c# com