设为首页 加入收藏

TOP

12.1.8 使用智能指针的封装类创建COM对象
2013-10-07 00:16:26 来源: 作者: 【 】 浏览:82
Tags:12.1.8 使用 智能 指针 封装 创建 COM 对象

12.1.8  使用智能指针的封装类创建COM对象

1.问题阐述

在前面就已经说过,COM之间的通讯是跨语言的,在前面都只直接包含了C接口,那么如果一个COM对象没有给C接口,应该如何调用呢?

2.实现技巧

在前面提到过,为了实现跨语言,微软提供了一个新的文件格式.idl,idl经过编译后,生成二进制的等价类型库文件 TLB提供给其他的语言使用。首先要将这个文件导入到工程中:

#import "..\Object\OBJECT.tlb" no_namespace

编译后会生成.tlh和.tlh文件的智能指针包装,利用智能指针包装创建对象。

3.实例代码

本实例演示了如何使用智能包装类创建COM对象,代码如下:

void CExample3Dlg::OnExeBtn() 
{
UpdateData(TRUE);
IFunPtr  spFun;
HRESULT hr = spFun.CreateInstance(__uuidof(Fun));
if(FAILED(hr))
{
MessageBox("创建COM接口失败!");
return;
}
m_add3 = spFun->Add(m_add1,m_add2);
BSTR s1,s2,s3;
s1 = m_str1.AllocSysString();
s2 = m_str2.AllocSysString();
s3 = spFun->CatString(s1,s2);
m_str3 = convert(s3);
UpdateData(FALSE);
}
如果使用命名空间,程序应该改动如下:
void CExample3Dlg::OnExeBtn() 
{
UpdateData(TRUE);
OBJECTLib::IFunPtr  spFun;
HRESULT hr = spFun.CreateInstance(__uuidof(OBJECTLib::Fun));
if(FAILED(hr))
{
MessageBox("创建COM接口失败!");
return;
}
m_add3 = spFun->Add(m_add1,m_add2);
BSTR s1,s2,s3;
s1 = m_str1.AllocSysString();
s2 = m_str2.AllocSysString();
s3 = spFun->CatString(s1,s2);
m_str3 = convert(s3);
UpdateData(FALSE);
}

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇12.1.3 利用IPicture接口实现显示.. 下一篇12.1.6 使用C++API创建COM对象

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: