一、.Net调用Com组件
.Net调用Com组件主要分为两类:静态调用及动态调用。
所谓静态调用:指通过通过tlbimp.exe命名产生Com组件在.Net环境下的包装类,然后通过这个包装类来访问Com组件。
所谓动态调用:是指不通过Com组件的包装类来进行Com组件调用,而是在远行时通过反射来进行Com组件调用。
下面将分别详细的讨论这两种实现方法:
<!--[if !supportLists]-->² <!--[endif]-->静态调用
<!--[if !supportLists]-->1、 <!--[endif]-->编写Com组件MyComponent.dll
<!--[if !supportLists]-->2、 <!--[endif]-->产生可访问Com组件的包装类:
tlbimp /out:Interop.MyComponent.dll MyComponent.dll
<!--[if !supportLists]-->3、 <!--[endif]-->在.Net代码中访问
只要在项目添加Com包装类,就可以像访问.Net的装配件一样访问Com组件。
当然上面的三个步骤也可以在VS中直接添加对Com组件的引用,让VS自动完成第二步。
注意:
<!--[if !supportLists]-->1、 <!--[endif]-->如果引用Com组件的.Net项目为结果为强命名组件,这个时候要求Com组件的包装类也必须为强命名组件,所以这个时候必须手动进行第二步操作,并且在产生包装类的时候设置snk文件名称,具体操作方法为:
tblimp /keyfile:filename.snk /out:Interop.MyComponent.dll MyComponent.dll
<!--[if !supportLists]-->2、 <!--[endif]-->要想有更多的设置请参考tlbimp的使用方法。
<!--[if !supportLists]-->² <!--[endif]-->动态调用
<!--[if !supportLists]-->1、 <!--[endif]-->编写Com组件MyComponent.dll。
<!--[if !supportLists]-->2、 <!--[endif]-->在.Net程序中产生要被调用的Com组件类的Type:
Type comType = Type.GetTypeFromCLSID( Guid ); 或
Type comType = Type.GetTypeFromProgID( string );
<!--[if !supportLists]-->3、 <!--[endif]-->生成Com组件类对象
object comObj = Activator.CreateInstance( comType ); 或
object comObj = comType.InvokeMember(
null,
BindingFlags.DeclaredOnly 关键词:Com与.Net互设置