Visual Studio中的“Win32项目”,“CLR空项目”和“空项目”模板有什么区别?

时间:2010-09-17 22:04:50

标签: visual-c++ winapi visual-studio-2010

我刚刚在今年夏天开始使用Visual Studio,主要是在CUDA和OpenCV相关项目上。在此之前,我一直在Linux上使用Makefiles和来自NVIDIA的common.mk makefile在CUDA上进行开发。

所以我的问题如下:我无法弄清楚一些不同项目模板之间的区别。我知道我必须使用Visual C ++选项的常规选项卡中的“Empty Project”,但这更多的是试验和错误,而不是实际知道发生了什么......

2 个答案:

答案 0 :(得分:5)

如果您想通常使用裸WinAPI来获得DLL或Win32应用程序,则使用Win32项目。公共语言运行时(CLR)项目用于创建C ++ / CLI项目,即使用C ++ / CLI来定位.NET平台。

项目之间的主要区别在于Visual Studio在预先创建的文件方面提出的。例如,一个窗口化的Win32应用程序(当你选择Win32项目而不是DLL时得到的)是用资源文件(菜单,加速器,图标等)和一些默认代码来创建和注册一个窗口类和实例化此窗口。

答案 1 :(得分:0)

创建Win32项目时,链接器子系统设置为Windows。创建空的C或C ++项目时,会将子系统设置为控制台。同样,Win32项目设置中的入口点期望使用WinMain或DllMain,而控制台期望使用int main。 CLR使您可以混合使用通常不建议使用的C ++和.NET。

Windows子系统可以针对可执行文件,dll,libs或驱动程序/本机(sys)文件。控制台子系统以控制台二进制可执行文件为目标。当使用CreateWindowEx API创建实际的Window应用程序,建立消息回调并插入消息处理程序循环时,通常使用WinMain。

带有int main的控制台子系统也可以创建Windowed应用程序,除非您最好使用WinMain。

一个Dll空项目将子系统设置为Windows,并将编译后的输出设置为(.dll)以及DllMain / APIENTRY的入口点,并且静态lib将与Dll相同,只是它将设置输出到(.lib)。

将项目设置为Native子系统将需要Windows Driver Development Kit编译驱动程序。