WEB开发网
开发学院软件开发VC COM逐步教程 阅读

COM逐步教程

 2006-07-22 22:54:38 来源:WEB开发网   
核心提示: 第9步:客户端还需要知道一个COM DLL什么时候可以从内存中卸载,深入一些来讲,COM逐步教程(7),进程内的COM对象可以通过调用API函数LoadLibrary来进行显式装载,这就可以将DLL装入客户端的进程地址空间,我们还要导出另一个DllUnregisterServer函数,这两

第9步:

客户端还需要知道一个COM DLL什么时候可以从内存中卸载。深入一些来讲,进程内的COM对象可以通过调用API函数LoadLibrary来进行显式装载,这就可以将DLL装入客户端的进程地址空间。同样,调用FreeLibrary可以将DLL显式卸载。

COM客户端必须知道DLL什么时候可以被安全卸载,它必须确认当前DLL中没有任何存在的COM对象实例。为了让这个计算更简单一些,我们将会在COM DLL中CAddObj和CAddFactory的C++构造函数中增加一个全局变量(g_nComObjInUse)的值。相似地,我们会在它们各自的析构函数中减少g_nComObjInUse的值。

我们还要导出一个特定的COM函数DllCanUnloadNow,它的实现如下:

STDAPI DllCanUnloadNow()
   {
   //
   //当DLL中没有存在的对象时,它就不在使用中了
   //(它所有的对象引用计数为0)
   //我们将会检查g_nComObjsInUse的值
   //
   if (g_nComObjsInUse == 0)
     {
     return S_OK;
     }
   else
     {
     return S_FALSE;
     }
   }

第10步:

COM对象的位置还需要被写入注册表,这可以通过一个外部的.REG文件实现,或者让DLL导出一个DllRegisterServer函数。为了清除注册表的内容,我们还要导出另一个DllUnregisterServer函数。这两个函数的实现在Registry.cpp之中。你可以使用一些简单的工具(如regsvr32.exe)来装载一个特定的DLL并执行DllRegisterServer/DllUnregisterServer。

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

Tags:COM 逐步 教程

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