最近刚开始学习COM编程,里面诸多的知识让我有点吃不消,将学习的点滴进行记录,跟大家分享。对于com的调用一直没怎么搞明白,今天通过查资料将其进行整理。(这里为了方便,dll的开发主要参考杨老师的这篇COM 组件设计与应用(五)——用 ATL 写第一个组件)。
COM的调用方法主要有一下几种:
IFun--方法Add(), IFun--方法Cat()2.在工程中导入组件或类型库
#import "组件所在目录simple.dll" no_namespace 或 #import "类型库所在目录simple.tlb" using namespace MYCOM;
// 加载动态库 hModule = LoadLibrary(TEXT(" simple.dll")); if(hModule) { // 获取函数地址 fnAdd = (LPFunc)GetProcAddress(hModule, TEXT("Add")); if(fnAdd) { // 调用函数 iRet = fnAdd( 2 , 4 ); printf( " Result is %d " , iRet); } // 释放动态库 FreeLibrary(hModule); hModule = NULL; }
CoInitialize(NULL); CLSID clsid; HRESULT hr=CLSIDFromProgID(OLESTR("Simple.Fun.1"),&clsid); CComPtr<IFun> pIFun;//智能指针 pIFun.CoCreateInstance(clsid); long ret = pIFun->Add(12,12); TCHAR buf[1024]; wsprintf(buf,TEXT("the retValue is: %d\n"),ret); MessageBox(NULL, buf, TEXT("RESULT"),MB_OK); pIFun.Release();//注意下 CoUninitialize();
CoInitialize(NULL); CLSID clsid; CLSIDFromProgID(OLESTR("Simple.Fun.1"),&clsid); { CComPtr<IFun> pIFun;//智能指针 pIFun.CoCreateInstance(clsid); long ret = pIFun->Add(12,12); TCHAR buf[1024]; wsprintf(buf,TEXT("the retValue is: %d\n"),ret); MessageBox(NULL, buf, TEXT("RESULT"),MB_OK); } CoUninitialize();
CoInitialize(NULL); CLSID clsid; HRESULT hr=CLSIDFromProgID(OLESTR("Simple.Fun.1"),&clsid); IFun *ptr; hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER, __uuidof(IFun),(LPVOID*)&ptr); long ret = ptr->Add(12,12); TCHAR buf[1024]; wsprintf(buf,TEXT("the retValue is: %d\n"),ret); MessageBox(NULL, buf, TEXT("RESULT"),MB_OK); CoUninitialize();