VC++动态链接库(DLL)编程深入浅出(四)
2007-03-15 21:48:07 来源:WEB开发网核心提示:这是《VC++动态链接库(DLL)编程深入浅出》的第四部分,阅读本文前,VC++动态链接库(DLL)编程深入浅出(四),请先阅读前三部分:(一)、(二)、(三),MFC扩展DLL的内涵为MFC的扩展,譬如扩展MFC的CStatic、CButton等类使之具备更强大的能力,使用Visual C++向导生产MFC扩展DLL
这是《VC++动态链接库(DLL)编程深入浅出》的第四部分,阅读本文前,请先阅读前三部分:(一)、(二)、(三)。
MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用MFC本身的DLL一样。除了可以在MFC扩展DLL的内部使用MFC以外,MFC扩展DLL与应用程序的接口部分也可以是MFC。我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic、CButton等类使之具备更强大的能力。
使用Visual C++向导生产MFC扩展DLL时,MFC向导会自动增加DLL的入口函数DllMain:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("MFCEXPENDDLL.DLL Initializing! ");
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(MfcexpenddllDLL, hInstance))
return 0;
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.
new CDynLinkLibrary(MfcexpenddllDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("MFCEXPENDDLL.DLL Terminating! ");
// Terminate the library before destructors are called
AfxTermExtensionModule(MfcexpenddllDLL);
}
return 1; // ok
}
上述代码完成MFC扩展DLL的初始化和终止处理。
更多精彩
赞助商链接