开发学院软件开发VC COM编程入门:深入COM服务器 阅读

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

 2006-07-21 11:44:59 来源:WEB开发网   
核心提示: 其中,CreateInstance()是创建COM对象的方法,COM编程入门:深入COM服务器(8),LockServer()在必要时让COM库增加或减少服务器的引用计数,一个定制接口的例子这个工程是一个能运行的DLL服务器例子,BSTRs主要用于Visual Basic 和 Window

其中,CreateInstance()是创建COM对象的方法。LockServer()在必要时让COM库增加或减少服务器的引用计数。

一个定制接口的例子

这个工程是一个能运行的DLL服务器例子,对象由类工厂创建,此DLL服务器在 CSimpleMsgBoxImpl组件对象类中实现了一个接口:ISimpleMsgBox。

接口定义

我们的新接口是ISimpleMsgBox。所有的接口多必须从IUnknown派生。这个接口只有一个方法:DoSimpleMsgBox()。注意它返回标准类型HRESULT。所有的方法都应该返回HRESULT类型,并且所有返回到调用者的其它数据都应该通过指针参数操作。

struct ISimpleMsgBox : public IUnknown
{
  // IUnknown 方法
  ULONG AddRef();
  ULONG Release();
  HRESULT QueryInterface( REFIID riid, void** ppv );
  // ISimpleMsgBox方法
  HRESULT DoSimpleMsgBox( HWND hwndParent, BSTR bsMessageText );
};
struct __declspec(uuid("{7D51904D-1645-4a8c-BDE0-0F4A44FC38C4}")) ISimpleMsgBox;

有__declspec的一行将一个GUID赋值给ISimpleMsgBox,并且以后可以用__uuidof操作符来获取GUID。这两个东西都是微软的C++的扩展。

DoSimpleMsgBox()的第二个参数是BSTR类型。意思是二进制串——即定长序列位的COM表示。BSTRs主要用于Visual Basic 和 Windows Scripting Host之类的脚本客户端。

接下来这个接口由CSimpleMsgBoxImpl C++类来实现。其定义如下:

class CSimpleMsgBoxImpl : public ISimpleMsgBox 
{
public:
  CSimpleMsgBoxImpl();
  virtual ~CSimpleMsgBoxImpl();
  // IUnknown 方法
  ULONG AddRef();
  ULONG Release();
  HRESULT QueryInterface( REFIID riid, void** ppv );
  // ISimpleMsgBox 方法
  HRESULT DoSimpleMsgBox( HWND hwndParent, BSTR bsMessageText );
protected:
  ULONG m_uRefCount;
};
class __declspec(uuid("{7D51904E-1645-4a8c-BDE0-0F4A44FC38C4}")) CSimpleMsgBoxImpl;
当某一客户端想要创建一个SimpleMsgBox COM对象时,它应该用下面这样的代码:
ISimpleMsgBox* pIMsgBox;
HRESULT hr;
// 组件对象类的CLSID
hr = CoCreateInstance ( __uuidof(CSimpleMsgBoxImpl),              NULL,             // 非聚合
    CLSCTX_INPROC_SERVER, // 进程内服务器
   __uuidof(ISimpleMsgBox), // 所请求接口的IID
  (void**) &pIMsgBox );     // 返回的接口指针的地址

上一页  3 4 5 6 7 8 9 10  下一页

Tags:COM 编程 入门

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接