ATL Internals 2ed复习.chapter 5.COM Server review

有3种类型的COM Server

in-process server (DLL)

提供了4个入口

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason,
    LPVOID lpReserved);     //当线程创建和销毁时被OS调用                   
                                                        
STDAPI DllRegisterServer(void);     //REGSVR32注册                    
STDAPI DllUnregisterServer(void);   //REGSVR32反注册                    
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid,  
    LPVOID* ppv);          //SCM需要获得一个class object需要调用该函数                             
STDAPI DllCanUnloadNow(void);  //当用户调用CoFreeUnusedLibraries(),COM会查询每一个in-process这个函数                         

 

out-of-process server (EXE)

system service (EXE in WinNT and above)

extern "C"                                                   
int WINAPI _tWinMain(HINSTANCE hInstance,                    
    HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd);

当在命令行中发现Register或者Unregister,local server将会注册/反注册自己
Local server在启动时,通过CoRegisterClassObject()将每个class object的IUnknown指针传给SCM

Local server在关闭时,通过CoRevokeClassObject()通知SCM其class object不再使用

COM server有3种职责

注册和反注册所有的class

为SCM提供COM class objects信息(IClassFactory)

管理server的生存期限

 

COM Createable and Noncreateable Classes

Createable:能够使用CoCreateInstance进行创建,并且必须提供实现了IClassFactory的class object

Noncreateable:不能使用CoCreateInstance创建,实际应用中,这些类数量远远大于Createable

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值