7

私はC++/ CLIでアプリを開発していて、マネージ部分から使用したいアンマネージコードでcsvファイル書き込みライブラリを持っています。したがって、私の関数は次のようになります。

bool CSVWriter::Write(const char* stringToWrite);

...しかし、私は光沢のあるSystem ::String^を互換性のあるものに変換するのに本当に苦労しています。基本的に、私は次のようなことをして電話をかけたいと思っていました。

if( m_myWriter->Write(String::Format("{0}",someValueIWantToSave)) )
{
    // report success
}
4

3 に答える 3

13
using namespace System::Runtime::InteropServices;
const char* str = (const char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer();

DevShedから。

于 2009-07-08T14:31:09.593 に答える
11

mcandreが言及しているように、Marshal :: StringToHGlobalAnsi()は正しいです。ただし、文字列が使用されなくなったら、 Marshal :: FreeHGlobal()を使用して新しく割り当てられたリソースを解放することを忘れないでください。

または、msclr :: interop :: marshal_asテンプレートを使用して文字列リソースを作成し、呼び出しがリソースのスコープを終了したときに自動的に解放することもできます。

于 2009-07-08T14:40:46.507 に答える
1

C ++でのマーシャリングの概要には、どのタイプがどの変換を必要とするかのリストがあります。

于 2009-07-09T08:44:31.393 に答える