Winforms Visual Studio 2010 C++;表单应用程序创建指针变量而不是常规变量
我试图将我的应用程序正在启动的进程的控制台输出重定向到文本框。我正在举一个例子 以下是我到目前为止的情况:Winforms Visual Studio 2010 C++;表单应用程序创建指针变量而不是常规变量,winforms,visual-studio-2010,visual-c++,c++-cli,Winforms,Visual Studio 2010,Visual C++,C++ Cli,我试图将我的应用程序正在启动的进程的控制台输出重定向到文本框。我正在举一个例子 以下是我到目前为止的情况: private: System::Void button_backup_Click(System::Object^ sender, System::EventArgs^ e) { Process^ childprocess = gcnew Process(); childprocess->StartInfo =
private: System::Void button_backup_Click(System::Object^ sender, System::EventArgs^ e) {
Process^ childprocess = gcnew Process();
childprocess->StartInfo = gcnew ProcessStartInfo("cmd.exe");
childprocess->StartInfo->UseShellExecute = false;
childprocess->EnableRaisingEvents = true;
childprocess->StartInfo->CreateNoWindow = true;
childprocess->ErrorDataReceived += gcnew DataReceivedEventHandler(process_DataReceived);
childprocess->OutputDataReceived += gcnew DataReceivedEventHandler(process_DataReceived);
childprocess->Start();
childprocess->WaitForExit();
}
第一个问题:
自从几天前我开始学习C++ Windows窗体应用程序,我就永远无法使用包含DoT操作符的代码。我总是不得不用->来替换一切。例如,在前面的代码块中,如果我尝试:
Process process = new Process();
就像在教程中写的一样,我收到错误C2750:“System::Diagnostics::Process”:不能在引用类型上使用“new”;改用“gcnew”
当我使用表单GUI创建一些对象时,也会发生这种情况。比如说一个组合框。要设置我需要执行的项目:组合框->项目->添加。有了点,它不会编译并给出错误,但我看到的大多数教程都有点而不是->。为什么我的VisualStudio没有生成可以使用点的代码
第二个问题:
我想完成我链接到的示例。我需要实施
void process_DataReceived(object sender, DataReceivedEventArgs e)
{
richTextBox.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate()
{
richTextBox.AppendText(e.Data);
})
);
}
但它根本不起作用。我已经把这段代码放在了前一个块之后,它是在VisualStudioC++生成的(后面是VisualStudio++将事件代码放在这里)之后的。
<>我注意到我的VisualStudioC++生成了如下参数列表:
(System::Object^ sender, System::EventArgs^ e)
鉴于在本例中:
(object sender, DataReceivedEventArgs e)
为什么格式不一样
多谢各位
(System::Object^ sender, System::EventArgs^ e)
这是一种称为C++/CLI(公共语言基础设施)的语言。它是C++直接使用CLR的一种适配。它不是C++。您可以创建可由任何其他CLR语言本机使用的模块,但代码(至少,ref
类)编译为MSIL,而不是本机机器代码
(object sender, DataReceivedEventArgs e)
那是C。这两个签名在语义上是相同的(除了
EventArgs
参数类型之间的差异),但语言不同。示例是用C#编写的。您正在使用C++/CLI。这些看起来有点相似,但它们非常不同,只是表面上相关的语言。是的,这不是C++,那些不是指针。标签变了。