什么是的批准方式转换从char*以系统::string和回C++/CLI?我发现了一些引用marshal_to<>模板功能上谷歌,但它的出现,这个功能不作出切Visual Studio2005年(而不是在Visual Studio2008年,据我所知).我们也看到一些代码 斯坦利普曼的博客, 但是,从2004年。我也看见元帅::StringToHGlobalAnsi().是有一个方法,该方法被认为是"最佳做法"?

有帮助吗?

解决方案

有一个很好的概述的在这里(这封送支持加入为VS2008):http://www.codeproject.com/KB/mcpp/OrcasMarshalAs.aspx

其他提示

系统::String有一个构造,需要一个char*:

 using namespace system;
 const char* charstr = "Hello, world!";
 String^ clistr = gcnew String(charstr);
 Console::WriteLine(clistr);

让char*回是一个有点难,但不是太坏:

 IntPtr p = Marshal::StringToHGlobalAnsi(clistr);
 char *pNewCharStr = static_cast<char*>(p.ToPointer());
 cout << pNewCharStr << endl;
 Marshal::FreeHGlobal(p);

我们所做的是作出一C++\CLI对象举行的串在unmangaed码,并将给予了管理的副本,该项目。代码转换看起来非常像什么斯坦已经在他的博客(我不可能记住它正)(如果使用他的代码确保更新它使用删除[])但是,我们确信,析构将处理释放所有的unmanged元的对象。这是一个有点夸大其词但是我们没有泄漏时我们绑到遗C++码模块。

我创建了一些辅助方法。我需要做这个动从一个老脱库CLI串。如果任何人都可以添加到本,告诉我如果它看起来像我有一个内存泄漏和我能做些什么来解决它,我将十分感激。

void MarshalString (  String ^ s, wstring& os ) {
    using namespace Runtime::InteropServices;
    const wchar_t* char = (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
    os = char;
}
QString SystemStringToQt( System::String^ str)
{
    wstring t;
    MarshalString(str, t);
    QString r = QString::fromUcs2((const ushort*)t.c_str());
    return r;
}

一个额外的链接,以摘要的可能的方式:

http://support.microsoft.com/?kbid=311259

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top