C++ cli 试图将文本字段值写入c++;

C++ cli 试图将文本字段值写入c++;,c++-cli,C++ Cli,我为这个错误感到非常愤怒 ------ Build started: Project: shotfactorybatchgen, Configuration: Debug Win32 ------ shotfactorybatchgen.cpp c:\documents and settings\administrator\my documents\visual studio 2010\projects\shotfactorybatchgen\shotfactorybatchgen\For

我为这个错误感到非常愤怒

 ------ Build started: Project: shotfactorybatchgen, Configuration: Debug Win32 ------
  shotfactorybatchgen.cpp
c:\documents and settings\administrator\my documents\visual studio 2010\projects\shotfactorybatchgen\shotfactorybatchgen\Form1.h(307): error C2664: 'fprintf' : cannot convert parameter 2 from 'System::String ^' to 'const char *'
          No user-defined-conversion operator available, or
          Cannot convert a managed type to an unmanaged type
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
我环顾了所有的互联网络,但找不到答案。下面是发生错误的代码

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
   Decimal value;
   if(!Decimal::TryParse(textBox4->Text, value)) {
    MessageBox::Show("Non-numeric characters detected in 'Wait Time' filed", "Oops", MessageBoxButtons::OK, MessageBoxIcon::Warning);
   } else {
    if(!Decimal::TryParse(textBox3->Text, value)) {
     MessageBox::Show("Non-numeric characters detected in 'Max Upload' filed", "Oops", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    } else {
     FILE *OutFile = fopen("run.bat","w");
     fprintf(OutFile,"@ECHO OFF\r\nC:\\Python26\\python.exe factory.py");
     if(factoryname->Text != ""){
      fprintf(OutFile," -f ");
      fprintf(OutFile,factoryname->Text);
     }
     fclose(OutFile); 
    }
   }
   }
有什么想法吗?这是一个简单的windows窗体应用程序。我使用Visual Studio C++ 2010

谢谢


Colu

这只是一个转换错误:

cannot convert parameter 2 from 'System::String ^' to 'const char *'
可能的解决方案发布在此处:


这只是一个转换错误:

cannot convert parameter 2 from 'System::String ^' to 'const char *'
可能的解决方案发布在此处:


如果
factoryname->Text
标识属性,则其getter可能会引发CLR异常,在这种情况下,您将泄漏文件句柄
OutFile
。考虑不要使用<代码> fOpen< /COD>等。它是一个C库函数,还有更好的选择,如<代码> STD::OFFROW

或者,由于.NET可用,您可以使用
StreamWriter
,这将允许您通过
System::String
,从而避免转换问题:

StreamWriter writer(someFilePath);
writer.WriteLine(someString);

退出作用域时,C++/CLI将负责关闭
编写器

如果
factoryname->Text
标识属性,则其getter可能会引发CLR异常,在这种情况下,您将泄漏文件句柄
OutFile
。考虑不要使用<代码> fOpen< /COD>等。它是一个C库函数,还有更好的选择,如<代码> STD::OFFROW

或者,由于.NET可用,您可以使用
StreamWriter
,这将允许您通过
System::String
,从而避免转换问题:

StreamWriter writer(someFilePath);
writer.WriteLine(someString);

C++ > CLI将在关闭该范围时注意关闭<代码>编写器>代码> < /P>。您使用的语言称为C++ + CLI,与标准C++是非常不同的。将来在谷歌搜索类似问题的答案时,使用正确的名称可能会有所帮助。我已经重新标记了你的问题。你使用的语言叫做C++ + CLI——与标准C++非常不同。将来在谷歌搜索类似问题的答案时,使用正确的名称可能会有所帮助。我已相应地为您的问题重新添加了标签。我使用了ptrToStringChars(),但现在出现以下转换错误:错误C2664:“fprintf”:无法使用[Type=const wchar\u t]将参数2从“cli::interior\u ptr”转换为“const char*”无法将托管类型转换为非托管类型尝试使用ptrToStringChars(),但现在出现此转换错误:错误C2664:“fprintf”:无法使用[type=const wchar\u t]将参数2从'cli::interior_ptr'转换为'const char*'无法将托管类型转换为非托管类型