好吧,我已经创建了一个C#DLL,做出了所有的接口和方法都标记有ComVisible特性(真)。 它添加到GAC使用GACUTIL,然后使用regasm注册,并创建了一个类型库TLB文件。
现在,我有我想要到COM对象调用另一个C#项目,我该怎么办呢? 什么将代码大致模样导入然后COM对象使用其电话?
好吧,我已经创建了一个C#DLL,做出了所有的接口和方法都标记有ComVisible特性(真)。 它添加到GAC使用GACUTIL,然后使用regasm注册,并创建了一个类型库TLB文件。
现在,我有我想要到COM对象调用另一个C#项目,我该怎么办呢? 什么将代码大致模样导入然后COM对象使用其电话?
首先,你为什么要调用C#大会(您做了标记有ComVisible特性)在通过COM的其他C#项目? 这是没有必要的...
Ontopic:如果您已经创建了一个TLB文件,那么你不应该做任何特殊。 你可以只引用您所创建的C#程序集的“运行时可调用包装”。
第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
那一刻你的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