装了Visual Studio 2013,准备用熟悉的 .net c++写WinForm程序,发现创建项目时,Visual C++ -》CLR选项,没有Windows窗体应用程序。于是尝试自己配置
首先创建一个Visual C++ CLR空项目,名称为Test
1、创建完成后,打开项目属性选项卡,“通用属性”-》“引用”-》“添加新引用” -》“程序集”,选择System和System.Windows.Form程序集。
这个步骤的作用,是程序可以引用WinForm窗体系列类
2、添加新建项,Visual C++-》UI-》Windows窗体,就命名为MainForm吧,作为程序显示的第一个窗体。
添加main.cpp(我个人习惯,将程序入口点放在main.cpp中,代码如下
-
#include "MainForm.h"
-
int main()
-
{
-
System::Windows::Forms::Application::Run(gcnew Test::MainForm());
-
return 0;
-
}
4、生成、运行。应该看到MainForm窗体显示出来了。但是还有些瑕疵,就是出现了类似MSDOS的控制台窗口,如何不让这个窗口出现呢?
还得配置项目属性。打开项目属性选项卡。“配置属性”-》“链接器”-》“所有选项”-》“子系统”-》“窗口(/SUBSYSTEM:WINDOWS)”
然后生成,发现链接错误,"无法解析的外部符号[email protected]"。
那好吧,我把main.cpp中的int main改为int WinMain
-
#include "MainForm.h"
-
int WinMain()
-
{
-
System::Windows::Forms::Application::Run(gcnew Test::MainForm());
-
return 0;
-
}
运行。这回应该不显示类似MSDOS的控制台窗口了。
5、关闭MainForm窗体,退出程序。你会发现,程序异常崩溃了。
“托管调试助手“FatalExecutionEngineError” ......其他信息: 运行时遇到了错误。此错误的地址为 0x690d4191,在线程 0x5f4 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。”
看来还是哪里配置不对
还是配置项目属性。打开项目属性选项卡。“配置属性”-》“链接器”-》“高级”-》“入口点”,改为“main”
然后修改main.cpp代码,将WinMain改成main
-
#include "MainForm.h"
-
int main()
-
{
-
System::Windows::Forms::Application::Run(gcnew Test::MainForm());
-
return 0;
-
}
生成运行,这回应该正常了