您所在的位置: 首页>>读书频道>>设计开发>>C++>>

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

http://book.51cto.com  2008-06-13 11:55  郭克新编著  电子工业出版社  我要评论(0)
  • 摘要:《Visual C++代码参考与技巧大全》第12章主要讲的是COM组件技术操作技巧,COM是开发组件的一种方法,组件是一些小的二进制程序,它可以为操作系统或者应用程序提供服务。COM技术的发展进一步加强了程序的模块化编程的思想,使应用程序在更容易扩展与升级,具有更好的灵活性和动态性,COM支持了分部使应用程序的开发,本节为大家介绍使用智能指针的封装类创建COM对象。
  • 标签:Visual C++  代码  DLL操作  技巧  Visual C++代码参考与技巧大全

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】

回书目   上一节   下一节
让你的代码“炫”起来——WPF开发教程
J2EE实用技巧大全
Windows Server 2003技巧和应用
ADO.NET实用技巧专题
杀毒软件优化和使用技巧
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有