com组件初始化的几个方法
2009-11-15 23:42
106 查看
本篇幅参考http://www.vckbase.com/document/viewdoc/?id=1500代码
总结了几种的com初始化的方法
1. 经过 IUnknown得到 IFun 接口指针
2.不经过IUnknown直接得到IFun接口指针
3.使用CComPtr智能指针初始化
4.不再经过 IUnknown的智能指针初始化
5.不需AfxOleInit初始化,但必须释放智能指针
6.由于在 stdafx.h 中 #import 的时候,没有使用 no_namespace 因此要使用命名空间命名空间叫 ComNameLib ,这个名称是组件 IDL 文件 Library 指定的需要AfxOleInit()调用或者CoInitialize初始化,但必须在CoUninitialize释放智能指针
总结了几种的com初始化的方法
1. 经过 IUnknown得到 IFun 接口指针
CoInitialize(NULL); IUnknown * pUnk = NULL; IFun * pFun = NULL; hr=::CoCreateInstance(CLSID_Fun,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,(LPVOID *)&pUnk); pUnk->QueryInterface(IID_IFun,(LPVOID *)&pFun); .......//调用pFun方法实现代码 CoUninitialize();
2.不经过IUnknown直接得到IFun接口指针
CoInitialize(NULL); IFun * pFun = NULL; hr=::CoCreateInstance(CLSID_Fun,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,(LPVOID *)&pFun); .......//调用pFun方法实现代码 CoUninitialize();
3.使用CComPtr智能指针初始化
// COM 初始化 以 AfxOleInit() 函数调用 CComPtr<IUnknown> spUnk; CComPtr < IFun > spFun; // 定义 IFun 智能指针 HRESULT hr; hr=spUnk.CoCreateInstance(CLSID_Fun); if( FAILED( hr ) ) throw( _T("没有注册组件吧?") ); hr=spUnk.QueryInterface(&spFun); if( FAILED( hr ) ) throw( _T("居然没有接口?") );
4.不再经过 IUnknown的智能指针初始化
// COM 初始化 以 AfxOleInit() 函数调用, CComQIPtr< IFun, &IID_IFun > spFun; // 定义 IFun 智能指针 HRESULT hr; hr=spFun.CoCreateInstance(CLSID_Fun); spFun->method()....//指针形式调用Ifun函数
5.不需AfxOleInit初始化,但必须释放智能指针
CoInitialize(NULL); CComQIPtr<IFun,&IID_IFun> spFun; spFun.CoCreateInstance(CLSID_Fun); ..... spFun->method(); spFun.Release(); CoUninitialize();
6.由于在 stdafx.h 中 #import 的时候,没有使用 no_namespace 因此要使用命名空间命名空间叫 ComNameLib ,这个名称是组件 IDL 文件 Library 指定的需要AfxOleInit()调用或者CoInitialize初始化,但必须在CoUninitialize释放智能指针
//在std文件中 //#import "../TestATL_3/Debug/TestATL_3.dll" //CoInitialize(NULL); TestATL_3Lib::IFunPtr spFun(__uuidof(TestATL_3Lib::Fun)); ... spFun->method(); ... //spFun.Release(); //CoUninitialize();
相关文章推荐
- Form开发中组件控制的几个常用方法 .
- EXTJS动态载入组件定义文件并初始化组件,动态构造界面的方法.
- [备忘]检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA0060263B} 的组件时失败解决方法
- (用iis调用com来操纵Excel) 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。8000401A的错误解决方法
- 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败解决方法
- vb.net 封装 组件 成 com的方法
- EBS开发_Form开发中组件权限控制的几个常用方法
- 检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败 解决方法
- 不使用第三方组件,只调用COM,导出EXECL,但只装OFFICE2007,不装2003,直接强制引用动态库的方法
- 【iOS开发】UIView(包括子类)的几个初始化方法
- COM 组件注册方法
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。8000401A的错误解决方法
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,错误: 80070005 解决方法
- vb.net 封装 组件 成 com的方法
- C#操作Word导致 “Microsoft.Office.Interop.Word.ApplicationClass”的 COM 组件错误的解决方法
- Spring MVC启动时初始化的几个常用方法
- "对COM 组件的调用返回了错误 HRESULT E_FAIL"的解决方法
- zk中的几个获得组件的方法
- vb.net 封装组件成com的方法
- 的引用(请使用 TLBIMP 实用工具来引用 COM DLL): 提供程序 DLL 未能正确初始化。----------解决方法