这是《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!\n");
// 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!\n"); // Terminate the library before destructors are called AfxTermExtensionModule(MfcexpenddllDLL); } return 1; // ok } 上述代码完成MFC扩展DLL的初始化和终止处理。 由于MFC扩展DLL导出函数和变量的方式与其它DLL没有什么区别,我们不再细致讲解。下面直接给出一个MFC扩展DLL的创建及在应用程序中调用它的例子。
|