COM逐步教程
2006-07-22 22:54:38 来源:WEB开发网第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。
更多精彩
赞助商链接