使用C#访问COM+

 

刘彦青 编译

本篇文章详细地介绍了如何使用C#语言访问COM+应用程序。文章中的代码是在Visual C# 7.00.9254上编译通过的,经过很少的修改也可以在β1版的Visual C#上编译通过。
如果需要使用任一种支持.net的语言访问现有的COM+应用程序,我们无需修改现有COM+的一行代码,尽管它们的执行模式是完全不同的。我们可以使用前期绑定和后期绑定二种方法访问COM+,本文将具体介绍前期绑定的方法。
一、前期绑定
1、要求的工具
TlbImp.exe(类型库导入程序): 将在COM组件中发现的类型定义信息导入(转换、生成封装DLL)相应的.net定义(元数据)中,Ildasm.exe可以浏览TlbImp生成的元数据。如果使用的是Visual Studio开发环境,只要添加指向COM类型库的引用即可,转换工作就可以自动完成。
2、前期绑定实现对COM的访问
要使用现有的COM+应用程序,我们需要使用TlbImp.Exe创建Runtime Callable Wrapper(RCW运行库可调用的封装容器),在VS.Net开发环境中,只要我们调用现有的COM组件,就会自动地创建RCW。其区别是,VS.Net在创建RCW时使用了与原来的DLL文件相同的文件名,这有时会造成混淆。使用TlbImp.Exe,我们可以使用/out:参数来指定一个不同的文件名。
我们假设有一个有名字为Add的方法的COM组件,Add方法要求二个参数A和B,并返回SUM。
注意:在使用之前,我们必须首先注册COM DLL。
'CompAdd.Dll
(class1)
Public Function Add(A As Long, B As Long) As Long
 
Add = A + B
 
End Function
然后我们就可以对现有的DLL(在本例中为CompAdd.Dll)运行TlbImp.Exe了:
上面的命令会生成一个名字为CompAddRcw.dll的封装容器DLL,我们可以使用IlDasm.Exe来浏览DLL文件。
对IlDasm.Exe的讨论超出了本篇稿子的范围。我们可以简单地编写利用Wrapper DLL的代码,Wrapper DLL将调用实际的DLL文件。下面我们来研究完成这一工作所使用的C#代码。
使用/r:开关编译该段程序,例如,csc TestClient.cs /r:CompAddRcw.dll,然后执行编译后的程序,我们就在.net环境中调用了COM组件。
二、后期绑定
在后期绑定中,我们必须使用System.Reflection名字空间,它允许我们通过编程的方式访问任何组合体中的类型。下面我们将学习如何通过简单的4个步骤完成后期绑定。
·通过使用Type.GetTypeFromProgID("Project1.Class1")获得IDispatch接口。
·使用获得的类型IDActivator.CreateInstance(objAddType)创建实例。
·生成参数数组(如果需要)。
·使用objAddType.InvokeMember函数调用方法。
Type.GetTypeFromProgID方法用来加载COM对象的类型信息,对Activator.CreateInstance的调用返回COM对象的一个实例,InvokeMember函数用于调用COM对象的方法。
结束语:本篇文章给出了如何利用COM应用程序的最基本的概念,为了使代码显得简洁,我们没有给出相关的错误处理部分。
 

你可能感兴趣的:(.net,function,C#,dll,语言,wrapper)