WEB开发网
开发学院软件开发VC VC++动态链接库(DLL)编程深入浅出(四) 阅读

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的初始化和终止处理。

1 2 3 4  下一页

Tags:VC 动态 链接

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接