C#调用C++的COM组件简单示例
来源:互联网 发布:2016中国钢铁出口数据 编辑:程序博客网 时间:2024/06/05 11:21
一 建立ATL COM ,增加接口ITest和实现函数Test,增加以下函数:
idl文件:
[id(1), helpstring("method ADD")] HRESULT ADD([in] LONG x, [in] LONG y, LONG* z);
[id(2), helpstring("method UpperCase")] HRESULT UpperCase([in] CHAR A, CHAR* B);
[id(3), helpstring("method LowerCase")] HRESULT LowerCase([in] BSTR A, BSTR* B);
[id(4), helpstring("method Change")] HRESULT Change([in] VARIANT A, [out] VARIANT* B);
};
ITest文件:
ITest : public IDispatch
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ADD(
/* [in] */ LONG x,
/* [in] */ LONG y,
LONG *z) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UpperCase(
/* [in] */ CHAR A,
CHAR *B) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE LowerCase(
/* [in] */ BSTR A,
BSTR *B) = 0;
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Change(
/* [in] */ VARIANT A,
/* [out] */ VARIANT *B) = 0;
};
在Test中实现以上接口函数。
二 在C#中的使用方法
1)使用IDE中的reference来reference com,这个之前com必须先注册:
2)使用命令TLBIMP ATLCOM.tlb /out:C:/ATLCOM.dll ,然后referece生成的DLL(tblmp命令帮你注册com)。
3)TypeLibConverter 类
TypeLibConverter 类(位于 System.Runtime.InteropServices 命名空间中)提供了将类型库中的 coclass 和接口转换为程序集中的元数据的方法。此 API 将生成与 Tlbimp.exe 相同的元数据输出。不过,与 Tlbimp.exe 不同的是,TypeLibConverter 类可以将内存中的类型库转换为元数据。
4)自定义包装
当类型库不可用或不正确时,一种可选的做法是在托管源代码中创建类或接口的重复定义。然后,用面向运行库的编译器来编译源代码以生成程序集中的元数据。
要手动定义 COM 类型,必须具备下列各项:
所定义的 coclass 和接口的精确描述。
可生成正确 .NET Framework 类定义的编译器,如 C# 编译器。
有关类型库到程序集转换规则的知识。
编写自定义包装是一种较少使用的高级技术。有关生成自定义包装的其他信息,请参见自定义标准包装。
三 在C#的client调用COM提供的接口,我们可以看到在C#中COM的接口和函数被变换为如下:
Member of atlcom.TestClass:
public TestClass();
public virtual void ADD(int x, int y, ref int z);
public virtual void UpperCase(sbyte A, ref sbyte B);
public virtual void Change(object A, out object B) ;
public virtual void LowerCase(string A, ref string B);
四 更多可以参考:http://www.codeproject.com/dotnet/cominterop.asp
- C#调用C++的COM组件简单示例
- C#调用C++COM组件
- 编写C++C#相互调用COM组件
- C#调用COM组件
- C#调用C/C++ dll文件 的简单示例
- com组件调用代码示例
- js调用COM组件示例
- VC调用C#写的COM+组件
- VC调用C#写的COM+组件
- VC调用C#的COM组件(DLL)
- VC调用C#写的COM组件
- VC调用C#的COM组件(DLL)
- C#调用MATLAB的COM组件
- VC调用C#的COM组件(DLL)
- C++ 调用 C#的COM组件
- C++调用C#编写的COM组件
- JavaScript调用C#编写的COM组件
- 简单调用自己写的COM组件
- 11月19号,回家了
- ARM中C语言和汇编语言混合编程
- 我的承诺
- 最近上的网站
- 11月20号,又回来了,复试我想表现可能不是很好
- C#调用C++的COM组件简单示例
- EVC 对话框编程的几个入门级经验(作者:gooogleman)
- 十种防止记忆力减退的方法
- 致女孩儿
- File
- Just for Note --- Android.policy
- 11月21号,又是一个周末的招聘会
- PHP 几个路径函数
- 读取文件中的内容将其显示出来