Visual c++ “a”和“a”之间有什么区别;Win32项目“&引用;CLR空项目“;,及;“空项目”;VisualStudio中的模板?

Visual c++ “a”和“a”之间有什么区别;Win32项目“&引用;CLR空项目“;,及;“空项目”;VisualStudio中的模板?,visual-c++,winapi,visual-studio-2010,Visual C++,Winapi,Visual Studio 2010,今年夏天,我刚刚开始与VisualStudio合作,主要从事CUDA和OpenCV相关的项目。在此之前,我一直在使用NVIDIA的Makefiles和common.mk makefile在Linux上为CUDA进行开发 所以我的问题如下:我一直无法弄清楚一些不同的项目模板之间的区别。我知道我必须使用VisualC++选项的“通用”选项卡中的“空项目”,但这是更为错误的尝试,而不是真正知道正在发生的事情… 如果您想使用DLL或Win32应用程序通常使用裸露的WinAPI,则使用Win32项目。公共

今年夏天,我刚刚开始与VisualStudio合作,主要从事CUDA和OpenCV相关的项目。在此之前,我一直在使用NVIDIA的Makefiles和common.mk makefile在Linux上为CUDA进行开发


所以我的问题如下:我一直无法弄清楚一些不同的项目模板之间的区别。我知道我必须使用VisualC++选项的“通用”选项卡中的“空项目”,但这是更为错误的尝试,而不是真正知道正在发生的事情…

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


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

创建Win32 project时,链接器子系统设置为Windows。当创建空C或C++项目时,子系统被设置为控制台。同样,Win32项目设置中的入口点需要WinMain或DllMain,而控制台需要int main。CLR允许您将通常被劝阻的C++和.NET混合。

Windows子系统可以针对可执行文件、DLL、LIB或驱动程序/本机(sys)文件。而控制台子系统以控制台二进制可执行文件为目标。WinMain通常在使用API创建实际窗口应用程序、建立消息回调和插入消息处理程序循环时使用

带有
intmain
的控制台子集群也可以创建一个窗口化的应用程序,但最好使用WinMain

Dll空项目将子系统设置为Windows,并将编译输出设置为(.Dll),将入口点设置为DllMain/apitery,静态库将执行与Dll相同的操作,只是将输出设置为(.lib)


将项目设置为本机子系统将需要Windows驱动程序开发工具包来编译驱动程序

那么,一个空项目仅仅是您可以启动的最小项目吗?