设为首页 加入收藏

TOP

VC调用COM的方法总结 (二)
2014-11-23 19:30:40 】 浏览:316
Tags:调用 COM 方法 总结
E);

(2)运行COM服务EXE方式
在运行COM服务EXE前只需要注册类对象即可:

[cpp] view plaincopyprint hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE);

hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE);
注册的类对象通过之前Init已经实现了:

[cpp] view plaincopyprint _Module.Init(ObjectMap, hInstance, &LIBID_BANKLib);

_Module.Init(ObjectMap, hInstance, &LIBID_BANKLib);注意:由于采用的运行EXE方式,只要此EXE进程退出,客户端即会出现调用不到接口的现象,虽然不会报接口出错,但得到的数据都是0。

二、客户端的设计
客户端要能调用到服务端的接口,必须满足两个条件:

(1)服务器开启了服务;

(2)知道服务器端的IID与CLSID;

1、在客户端我们先定义IID与CLSID:
[cpp]
///////////////////////////////////////CLSID & IID
const IID IID_IAccount = {0xEF327845,0x40A8,0x4AE0,{0x90,0x50,0xEA,0x7F,0xAD,0x02,0x75,0xEA}};


const IID LIBID_BANKLib = {0x98ECF356,0x06EF,0x4F72,{0xA3,0xA0,0x6E,0xCA,0x37,0x25,0x50,0x9E}};


const CLSID CLSID_Account = {0xEB914BA1,0x3C9C,0x4321,{0xBB,0x87,0xD2,0xF8,0xE3,0xEF,0xEB,0x09}};

///////////////////////////////////////CLSID & IID
const IID IID_IAccount = {0xEF327845,0x40A8,0x4AE0,{0x90,0x50,0xEA,0x7F,0xAD,0x02,0x75,0xEA}};


const IID LIBID_BANKLib = {0x98ECF356,0x06EF,0x4F72,{0xA3,0xA0,0x6E,0xCA,0x37,0x25,0x50,0x9E}};


const CLSID CLSID_Account = {0xEB914BA1,0x3C9C,0x4321,{0xBB,0x87,0xD2,0xF8,0xE3,0xEF,0xEB,0x09}};

2、获得服务器的接口IAccount *pAccount;
通过CoCreateInstance获得IUnknown指针,然后通过IUnknown指针返回IAccount指针:

[cpp]
//创建对象实例,并返回IUnknown 指针
hr = CoCreateInstance(CLSID_Account, NULL,
CLSCTX_LOCAL_SERVER , IID_IUnknown, (void**)&pUnknown);
if(FAILED(hr))
{
MessageBox("创建对象实例失败!");
return false;
}

//通过IUnkonwn指针去查询接口指针,返回IAccount指针
hr = pUnknown->QueryInterface(IID_IAccount,(void**)&pAccount);
if(FAILED(hr))
{
MessageBox("没有查找的接口指针!");
return false;
}

pUnknown->Release();

//创建对象实例,并返回IUnknown 指针
hr = CoCreateInstance(CLSID_Account, NULL,
CLSCTX_LOCAL_SERVER , IID_IUnknown, (void**)&pUnknown);
if(FAILED(hr))
{
MessageBox("创建对象实例失败!");
return false;
}

//通过IUnkonwn指针去查询接口指针,返回IAccount指针
hr = pUnknown->QueryInterface(IID_IAccount,(void**)&pAccount);
if(FAILED(hr))
{
MessageBox("没有查找的接口指针!");
return false;
}

pUnknown->Release();


作者:chenyujing1234
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇vc 下拉列表框 编程 下一篇模板的使用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目