【问题标题】:What is the difference between a "Win32 Project", "CLR Empty Project", and "Empty Project" templates in Visual Studio?Visual Studio 中的“Win32 项目”、“CLR 空项目”和“空项目”模板有什么区别?
【发布时间】:2010-09-17 22:04:50
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 那么一个空的项目仅仅是你可以开始的最小项目吗?
    【解决方案2】:

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

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

    带有int main 的控制台子系统也可以创建一个窗口应用程序,但最好使用 WinMain。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2021-07-27
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多