COM的宿主文件的构成

COM的宿主文件DLL 的构成:Server.cpp Sever.def

Server.cpp 定义四个供windowsCOM运行库和一些组件注册工具(如REGSVR32.EXE)使用的标准函数,如以下:

//

// DllMain -

//    Called by Windows when important events happen

//    to the DLL. In particular, we are interested when

//    the DLL is initially loaded. When this ocurrs, we

//    save the instance handle for later use.

//     DLL文件被Windows加载时,由Windows调用的DLL入口函数(或初始化函数)

//

BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )

{

 。。。。。。。。。

}

 

//

// DllGetClassObject -

//      Called by COM to retrieve a component's class factory

//      implementation.

//            COM运行库调用来获取一个组件工厂的实现

//     通过工厂类的GUID即CLSID获取工厂类的IClassFactory接口,再调用接口的CreateInstance方法通过IID获取组件接口实例

//

STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void** ppv )

{

 。。。。。。。。。

}

 

//

// DllCanUnloadNow -

//     Called by COM to determine if this housing (DLL)

//     can be unloaded

//            COM调用来决定这个DLL宿主文件是否可以卸载出内存。

//

STDAPI DllCanUnloadNow(void)

{

    if ( g_lObjs || g_lLocks )

       return( S_FALSE );

    else

       return( S_OK );

}

 


//

// DllRegisterServer - Entry point called by utilities such as

// REGSVR32.EXE to update the registry with the appropriate

// values for each component type in this DLL housing.

//     由如REGSVR32.EXE之类的工具来调用以进行组件的注册表注册的函数

//

STDAPI DllRegisterServer(void)

{

   。。。。。。。。

}

 

//

// DllUnregisterServer - Entry point called by utilities such as

//                       REGSVR32.EXE to remove any registry values

//                       for the COM components in this housing.

//            由如REGSVR32.EXE之类的工具来调用以进行组件的注册表卸载清理的函数

//

STDAPI DllUnregisterServer(void)

{

   // For now, don't do anything...

   return S_OK;

}

 

另外Server.def 文件的内容如下:它定义DLL文件公布出来的可以由其它调用者进行调用的函数。

;

; Server.def : Declares the module parameters for the DLL.

;

 

LIBRARY      "SERVER"

DESCRIPTION 'SERVER Windows Dynamic Link Library'

 

EXPORTS

    ; Explicit exports can go here

    DllGetClassObject   PRIVATE

    DllCanUnloadNow     PRIVATE

DllRegisterServer   PRIVATE

 

如上所示,组件公布出了三个函数供COM运行库和REGSER32.EXE 进行调用的函数。

你可能感兴趣的:(com)