WEB开发网
开发学院软件开发VC 编写可复用性更好的C++代码:Band对象和COMToys(9)... 阅读

编写可复用性更好的C++代码:Band对象和COMToys(9)

 2006-07-21 11:45:59 来源:WEB开发网   
核心提示: { // protected block of code CTLockData lock(g_mydata);// do your worst……}由于有了智能指针,CTLockData的好处是不必记住解锁,编写可复用性更好的C++代码:Band对象和COMTo
{ // protected block of code
  CTLockData lock(g_mydata);
// do your worst
  ……
}

由于有了智能指针,CTLockData的好处是不必记住解锁,即便函数或代码块有多个出口。C++保证析构函数会被调用并且在控制离开时解锁。CTFactory在任何需要存取其全局类工厂列表时使用CTLockData。 

调试诊断

理解任何COM对象运作行为的最佳方法是只要接口方法被调用,就输出其诊断信息。没有这样的诊断,便不可能弄清楚Band对象是如何工作的。COMToys有一个内建的跟踪机制。IMPLEMENT_ IWhatsIt宏在每一个函数的开始处(顶部)产生TRACE语句,所以只要打开跟踪开关(COMToys::bTRACE = TRUE),就可以看到对象正在做什么。COMToys使用CTraceFn类。

COMToys能产生人们可读的接口名。这个诊断系统使用一个叫DbgName的重载函数来获得各种不同对象的"调试名"。DbgName(WM_DESTROY)返回WM_DESTROY;DbgName(SCODE)返回S_OK 或 E_OUTOFMEMORY之类的值;而DbgName(CWnd*)返回窗口名字。 

正如所期望的那样,DbgName(REFIID)返回人可读的GUID,如:{EB0FE172-1A3A-11D0-89B3-00A0C90A90AC},但如何知道这一长串东西代表的就是IDeskBand呢?COMToys有一个办法:

DEBUG_BEGIN_INTERFACE_NAMES()
  DEBUG_INTERFACE_NAME(IDeskBand)
DEBUG_END_INTERFACE_NAMES()   

现在DbgName(IID_IDeskBand)返回的是IDeskBand,而不是那让人费解的十六进制。这个宏产生一个局部表,它被链接到一个DbgName可以搜索的全局表中。详细内容请参见源代码中的debug.h 和 debug.cpp文件。 

COMToys 动态链接库DLL 

上一页  1 2 3 4 5 6 7  下一页

Tags:编写 复用 更好

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接