COM编程入门:深入COM服务器

来源: 作者: 2007-12-13 出处:pcdog.com

dos  安全  多线程  注册表  
上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 

  如图所示:

COM编程入门:深入COM服务器(图一)

  Test MsgBox COM Server菜单命令创建CSimpleMsgBoxImpl对象并调用DoSimpleMsgBox()。因为这
是个简单的方法,要写的代码不长。
我们先用CoCreateInstance()创建一个COM对象。
void DoMsgBoxTest(HWND hMainWnd)
{
ISimpleMsgBox* pIMsgBox;
HRESULT hr;
hr = CoCreateInstance ( __uuidof(CSimpleMsgBoxImpl), // 组件对象类的CLSID
              NULL,        // 非聚合
              CLSCTX_INPROC_SERVER, // 只使用进程内服务器
              __uuidof(ISimpleMsgBox), // 所请求接口的IID
              (void**) &pIMsgBox );  // 容纳接口指针的缓冲
  if ( FAILED(hr) )
    return;
然后调用DoSimpleMsgBox()方法并释放接口。
  pIMsgBox->DoSimpleMsgBox ( hMainWnd, _bstr_t("Hello COM!") );
  pIMsgBox->Release();
}

  就这么简单。代码中从头到尾都有TRACE语句,这样在调试器中运行测试程序就可以看到服务器的每一个方法

  是如何被调用的。

  另外一个菜单命令是调用CoFreeUnusedLibraries()函数,从中你能看到服务器DllCanUnloadNow()函数的运行。

  其它细节-COM宏

  COM代码中有些宏隐藏了实现细节,并允许在C和C++客户端使用相同的声明。本文中没有使用宏,但在例子代

  码中用到了这些宏,所以必须掌握它们的用法。下面是ISimpleMsgBox的声明

  struct ISimpleMsgBox : public IUnknown
{
  // IUnknown 方法
  STDMETHOD_(ULONG, AddRef)() PURE;
  STDMETHOD_(ULONG, Release)() PURE;
  STDMETHOD(QueryInterface)(REFIID riid, void** ppv) PURE;
  // ISimpleMsgBox 方法
  STDMETHOD(DoSimpleMsgBox)(HWND hwndParent, BSTR bsMessageText) PURE;
};
STDMETHOD()包含virtual关键字,返回类型和调用规范。STDMETHOD_()也一样,除非你指定不
同的返回类型。PURE扩展了C++的“=0”,使此函数成为一个纯虚拟函数。
STDMETHOD()和STDMETHOD_()有对应的宏用于方法实现——STDMETHODIMP和STDMETHODIMP_()。
例如DoSimpleMsgBox()的实现:
STDMETHODIMP CSimpleMsgBoxImpl::DoSimpleMsgBox ( HWND hwndParent, BSTR bsMessageText )
{
 ...
}
最后,标准的输出函数用STDAPI宏声明,如:
STDAPI DllRegisterServer()
STDAPI包括返回类型和调用规范。要注意STDAPI不能和__declspec(dllexport)一起使用,
因为STDAPI的扩展。输出必须使用.DEF文件。


更多内容请看PCdog.com--FTP服务器  代理服务器技术  刀片服务器专题
上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 
上一篇:应用服务器的技术发展趋势
下一篇:多层C/S的客户端调用服务器端的方法