一个完整的COM 示例Demo(C++语言描述)
对于初学com的,一个完整的示例还是挺麻烦的,最近笔者也在学习,通过自己的摸索了解了下基本原理。在此将一个简单string的示例一步一步的详解。
源代码下载
首先使用vs2010(笔者使用的vs2010就拿此来讲)创建一个工程。选择空项目,笔者命名为MyCom。
#include "IString.h"#include <Windows.h>#include <iostream>using namespace std;// {913AAE18-1D57-4868-AF2F-B47D32163E8F}extern "C" const GUID CLSID_String = { 0x913aae18, 0x1d57, 0x4868, { 0xaf, 0x2f, 0xb4, 0x7d, 0x32, 0x16, 0x3e, 0x8f } };// {416DC65F-48E2-436a-BA34-FC00AC3DA598}extern "C" const GUID IID_IString = { 0x416dc65f, 0x48e2, 0x436a, { 0xba, 0x34, 0xfc, 0x0, 0xac, 0x3d, 0xa5, 0x98 } };int main(){IString *pIStr;IUnknown *pIUk = NULL;HRESULT hr;char chGetChar[80];CLSID rclsid;if(CoInitialize(NULL) != S_OK){cout<<"initialize Failed"<<endl;return -1;}hr = CLSIDFromProgID(OLESTR("STRING.Object"),&rclsid);if (hr != S_OK){cout<<"Can't find the dictionary CLSID!"<<endl;return -2;}hr = CoCreateInstance(rclsid,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,(LPVOID*)&pIUk);if (hr != S_OK){cout<<"Create object failed!"<<endl;return -2;}hr = pIUk->QueryInterface(IID_IString,(LPVOID*)&pIStr);if (hr != S_OK) {pIUk->Release();printf("QueryInterface IString failed!\n");return -3;}pIStr->SetString("wqlgregergerg");pIStr->GetString(chGetChar,sizeof(chGetChar));cout<<chGetChar<<endl;pIStr->AboutMessage();CoUninitialize();return 0;} 终于贴完了。一个完整的示例,亲测可以哈!一起学习。