好的,我已经创建了一个c#dll,使其所有接口和方法都是ComVisible(true)。使用gacutil将其添加到GAC,然后使用regasm注册它并创建类型库tlb文件。
现在我有另一个c#项目,我想调用该com对象,我该怎么做?导入com对象然后使用其调用的代码大致是什么样的?
答案 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