MFC DLL是使用MFC组件和MFC运行时的动态库。这意味着MFC动态库通常需要MFC支持库以及MFC运行时。要编译MFC DLL,需要MFC包含文件和MFC指令。
使用Visual向导创建MFC DLL时,所有编译器、链接器以及创建MFC DLL所需的其他设置和选项都将与MFC DLL存根一起生成。
控制台应用程序是从控制台窗口使用C++运行时的应用程序。
当您使用Visual向导创建控制台应用程序时,所有用于创建控制台应用程序的编译器、链接器以及其他设置和选项都是通过控制台应用程序存根生成的,而控制台应用程序存根通常是Hello类型的应用程序,其main()包含一个printf()。
DLL的源代码具有与控制台应用程序主入口点所需结构不同的DLL主入口点的必需结构。请参阅包含以下示例源代码的Microsoft文章DllMain入口点:
代码语言:javascript复制BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
{
// Perform actions based on the reason for calling.
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
break;
case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
break;
case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;
case DLL_PROCESS_DETACH:
// Perform any necessary cleanup.
break;
}
return TRUE; // Successful DLL_PROCESS_ATTACH.
}因此,MFC DLL和控制台应用程序之间的差异涉及以下几个方面:
源代码的结构编译中使用的包含文件。链接中使用的库编译中使用的选项。链接中使用的选项更改配置类型不会修改源代码或包含源代码中指定的文件。更改配置类型也不会更改所有需要更改的编译器和链接器选项和属性设置。
请参阅本文DLLs和VisualC++运行时库行为,该文章讨论DLL的结构及其运行时行为,其中提供了EXE与DLL之间的区别。