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

11

我最近开始在Visual Studio上工作,主要是处理CUDA和OpenCV相关的项目。在此之前,我一直在Linux上使用Makefile和NVIDIA的common.mk Makefile进行CUDA开发。

我的问题是:我一直无法弄清楚不同项目模板之间的区别。我知道我必须使用Visual C++选项卡中的“空项目”,但这更多是通过尝试和错误来得出结论,而不是真正理解正在发生的事情...

2个回答

7

如果你想要得到一个DLL或Win32应用程序,通常使用裸的WinAPI,那么就需要使用Win32项目。而使用公共语言运行时(CLR)项目则是为了创建C++/CLI项目,也就是使用C++/CLI来针对.NET平台进行开发。

两种项目的主要区别在于Visual Studio预先创建的文件。例如,当你选择Win32项目时,会创建一个窗口化的Win32应用程序(但不是DLL),其中包含一些资源文件(菜单、加速器、图标等)以及一些默认代码,用于创建和注册窗口类并实例化该窗口。


那么,空项目只是你可以开始的最小项目吗? - Ian Lee

1
创建Win32项目时,链接器子系统设置为Windows。创建空的C或C++项目时,子系统设置为控制台。同样,Win32项目的设置中入口点期望WinMain或DllMain,而控制台则期望int main。CLR允许您混合使用C++和.NET,但通常不建议这样做。
Windows子系统可定位可执行文件、dll、lib或驱动程序/本机(sys)文件。而控制台子系统则针对控制台二进制可执行文件。通常在使用CreateWindowEx API创建实际窗口应用程序时会使用WinMain,以建立消息回调并插入消息处理循环。
带有int main的控制台子系统也可以创建窗口应用程序,但最好使用WinMain。
空的Dll项目将子系统设置为Windows,并将编译输出设置为(.dll),入口点设置为DllMain/APIENTRY。静态库与Dll相同,只是将输出设置为(.lib)。
将项目设置为本机子系统将需要Windows Driver Development Kit来编译驱动程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接