note : COM Tips
发布日期:2021-06-30 22:04:00
浏览次数:2
分类:技术文章
本文共 3740 字,大约阅读时间需要 12 分钟。
查看 _uuidof的值
LPOLESTR lpolestr; StringFromCLSID(__uuidof(Wzd), &lpolestr); wprintf_s(L"%s", lpolestr); CoTaskMemFree(lpolestr);
CreateInstance 入参
IWzdPtr pPtr; /// 接口CreateInstance 入参1 为接口类的UUID, helpstring("Wzd Class") HRESULT hr=pPtr.CreateInstance(__uuidof(Wzd)); if (FAILED(hr)) { _com_error err(hr); AfxMessageBox(err.ErrorMessage()); return; } pPtr->Method(...);
客户端调用COM DLL 接口中的方法
如果在创建COM接口实例时, 返回"类未注册".
需要检查一下注册的COMDLL和客户端EXE是否都为一个平台(x86/x64)
如果是大工程,有可能选了同样的设置(Release/x64), 但是具体的工程生成的设置还是x86的.
这个环境问题,还是挺隐蔽的~
比较好的方法是,单独打开每一个子工程,创建确认各种平台的编译设置.
在总工程的编译设置中,选择,确认每个子工程的编译设置.
某人因为这个环境问题,耽误了2天时间~
/// 用oleviewer看到的接口信息/// C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\x64\/// OleView.Exe// coclass AtlTest2057A// {38715ED2-0942-4B25-BAC2-3BB04D623A23}// IAtlTest2057A// uuid(B033480A-4BDD-402B-A579-0505F595EA94),#define UUID_coclass_AtlTest2057A L"{38715ED2-0942-4B25-BAC2-3BB04D623A23}"#define UUID_IAtlTest2057A L"{B033480A-4BDD-402B-A579-0505F595EA94}"/// @note /// X64版的COM组件, 必须编译成X64版的客户端访问, 使用X64版的OleViewer查看/// X86版的COM组件, 必须编译成X86版的客户端访问, 使用X86版的OleViewer查看/// 否则访问接口时,显示"类未注册"void CtestMfcDlgDlg::OnBnClickedButtonTestMyCom(){ HRESULT hr = S_FALSE; CLSID clsIDCoClass; CLSID clsIDCoInterface; IAtlTest2057A * pInterface = NULL; hr = CoInitialize(NULL); if (FAILED(hr)) { ShowHresultError(hr); goto _OnBnClickedButtonTestActiveDeskTop_END; } /// 可以用OleViewer的结果, 来确定是否能访问到正确的CLSID, IID hr = CLSIDFromString(UUID_coclass_AtlTest2057A, &clsIDCoClass); if (FAILED(hr)) { _com_error err(hr); AfxMessageBox(err.ErrorMessage()); goto _OnBnClickedButtonTestActiveDeskTop_END; } hr = IIDFromString(UUID_IAtlTest2057A, &clsIDCoInterface); if (FAILED(hr)) { _com_error err(hr); AfxMessageBox(err.ErrorMessage()); goto _OnBnClickedButtonTestActiveDeskTop_END; } // Create a COM object hr = CoCreateInstance ( clsIDCoClass, NULL, CLSCTX_INPROC_SERVER,///< 对于COM DLL 来说,是这个标记 clsIDCoInterface, (void**) &pInterface); if (FAILED(hr)) { ShowHresultError(hr); goto _OnBnClickedButtonTestActiveDeskTop_END; } /// use pInterface do task ... pInterface->Release();_OnBnClickedButtonTestActiveDeskTop_END: CoUninitialize();}/// 如果组件注册正常, 将COM接口定义文件直接包含进工程/// e.g. AtlTest2057_i.h AtlTest2057_i.c/// 直接使用组件的CLSID和IID, 比较方便/// e.g. CLSID_AtlTest2057A, IID_IAtlTest2057Avoid CtestMfcDlgDlg::OnBnClickedButtonTestMyCom1(){ HRESULT hr = S_FALSE; IAtlTest2057A * pInterface = NULL; hr = CoInitialize(NULL); if (FAILED(hr)) { ShowHresultError(hr); goto _OnBnClickedButtonTestActiveDeskTop_END; } // Create a COM object hr = CoCreateInstance ( CLSID_AtlTest2057A, NULL, CLSCTX_INPROC_SERVER, ///< 对于COM DLL 来说,是这个标记 IID_IAtlTest2057A, (void**) &pInterface); if (FAILED(hr)) { ShowHresultError(hr); goto _OnBnClickedButtonTestActiveDeskTop_END; } /// use pInterface do task ... pInterface->Release();_OnBnClickedButtonTestActiveDeskTop_END: CoUninitialize();}void ShowHresultError(HRESULT hr){ _com_error err(hr); AfxMessageBox(err.ErrorMessage());}
add .h for IActiveDesktop
#include// MFC 核心组件和标准组件#include // MFC 扩展/// This has to be included here, since IActiveDesktop uses/// constants from this header. See Q196342 for more.#include ///< add here to use IActiveDesktop#include // MFC 自动化类
Shell SDK Samples
http://msdn.microsoft.com/en-us/library/windows/desktop/dd940376(v=vs.85).aspx
转载地址:https://lostspeed.blog.csdn.net/article/details/12305133 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 18时45分01秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
用 Python 写的文档批量翻译工具,效果竟然超越付费软件?
2019-05-01
Python文本数据分析与挖掘,外版畅销书中文版火爆上市
2019-05-01
为 Python 项目编写 Makefile
2019-05-01
Seaborn + Pandas带你玩转股市数据可视化分析
2019-05-01
微软终于放大招了!这次能干掉Linux桌面?
2019-05-01
Python之父:Python 4.0可能不会来了
2019-05-01
Python爬虫快速入门,BeautifulSoup基本使用及实践
2019-05-01
PyTorch、TensorFlow最新版本对比,2021年了你选谁?
2019-05-01
深度学习图像标注工具labelme
2019-05-01
硅谷一万清华人,为何打不过印度人?
2019-05-01
太强了,用Python+Excel制作天气预报表!
2019-05-01
北大数学系“扫地僧”韦东奕爆红!拒绝哈佛 offer,留任北大,却因长相引热议...
2019-05-01
Python中文速查表来了!精心整理52张思维导图!
2019-05-01
别再问我Python打包成exe了!(终极版)
2019-05-01
当铛噹!Python字符串速查表来啦~
2019-05-01
收费的 XShell,我改用国产良心工具!
2019-05-01
想象中的论文答辩和真实的论文答辩!哈哈哈哈哈哈……
2019-05-01
基于 Python 的 11 种经典数据降维算法
2019-05-01
PyPy为什么能让Python原地起飞,速度比C还快!
2019-05-01