如何用ATL写一个C++的COM组件(C#轻松调用C/C++接口)

似乎关于COM的ALT中文教程不多 自己研究了下 现在奉献给大家 若大家有兴趣 会接着继续讲下去哦~~~


视频在此 


http://v.youku.com/v_show/id_XMTUwMDM4NDY2NA==.html



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
调用 COM 组件的方法有多种方法,下面是其中的几种示例代码: 1. 使用 CreateInstance 函数创建 COM 对象并调用其方法: ``` CoInitialize(NULL); // 初始化 COM 组件 ISomeInterface* pSomeInterface = NULL; HRESULT hr = CoCreateInstance(CLSID_SomeComponent, NULL, CLSCTX_ALL, IID_ISomeInterface, (void**)&pSomeInterface); if (SUCCEEDED(hr)) { pSomeInterface->SomeMethod(); pSomeInterface->Release(); } CoUninitialize(); // 释放 COM 组件 ``` 2. 使用 IDispatch 接口调用 COM 对象的方法: ``` CoInitialize(NULL); // 初始化 COM 组件 IDispatch* pDispatch = NULL; HRESULT hr = CoCreateInstance(CLSID_SomeComponent, NULL, CLSCTX_ALL, IID_IDispatch, (void**)&pDispatch); if (SUCCEEDED(hr)) { VARIANTARG varg1, varg2, varg3; VariantInit(&varg1); VariantInit(&varg2); VariantInit(&varg3); // 设置参数 varg1.vt = VT_I4; varg1.lVal = 1; varg2.vt = VT_BSTR; varg2.bstrVal = SysAllocString(L"Hello"); varg3.vt = VT_BOOL; varg3.boolVal = VARIANT_TRUE; DISPPARAMS dispparams = { &varg1, &varg2, &varg3, 3, 0 }; // 调用方法 VARIANT variantResult; VariantInit(&variantResult); hr = pDispatch->Invoke(DISPID_SomeMethod, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispparams, &variantResult, NULL, NULL); // 处理返回值 if (SUCCEEDED(hr)) { // do something with variantResult VariantClear(&variantResult); } VariantClear(&varg1); VariantClear(&varg2); VariantClear(&varg3); pDispatch->Release(); } CoUninitialize(); // 释放 COM 组件 ``` 3. 使用 ATL 的 CComPtr 类模板调用 COM 对象的方法: ``` CoInitialize(NULL); // 初始化 COM 组件 CComPtr<ISomeInterface> pSomeInterface; HRESULT hr = pSomeInterface.CoCreateInstance(CLSID_SomeComponent); if (SUCCEEDED(hr)) { pSomeInterface->SomeMethod(); } CoUninitialize(); // 释放 COM 组件 ``` 以上示例仅供参考,具体实现方式可能因 COM 组件的实现方式和语言而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值