C++ でのマネージ型とアンマネージ型間の変換は?
-
09-09-2019 - |
質問
C++ で GUI を使用する場合、テキスト フィールドはマネージド文字列として保存されると思います。それらを標準の int、float、string に変換する方法が必要です。何か助けはありますか?
解決
System.String をアンマネージ char * に変換するには、次のようにします。 Marshal.StringToHGlobalAnsi. 。電話をかけて終了したら必ず解放してください Marshal.FreeHGlobal. 。文字列を数値に変換するには、次のような通常の .NET 解析関数を使用できます。 Int32.Parse
.
他のヒント
ネイティブコードで管理するメモリを使用するには、まずネイティブメモリに管理するメモリの内容をコピーする必要があります。
ですから、例えばます:
次のように管理するメモリの内容をコピーすることはあります:
const int len = 50;
BYTE *destination = new BYTE[nLength];
System::Byte source[] = new System::Byte[len];
System::Runtime::InteropServices::Marshal::
Copy(source, 0, IntPtr((void *)destination, len);
私たちがマネージメモリを扱っているので、我々は変換したいデータを見つけるためにしようとした場合、ガベージコレクションがシフトし、別の場所に管理されたデータを移動し、すべてが失われてしまうことができます。
そこで我々は、アンマネージに管理から変換すること__pin使用することによって、「メモリにピン」にしたい:
const int len = 50;
BYTE *source = new BYTE[len];
System::Byte destination[] = new System::Byte[len];
BYTE __pin *managedData = &(destination[0]);
::memcpy(source, managedData, len);
あなたは、単に
によりMFCのCStringにシステム::文字列^オブジェクトに変換することができますCString* name = new CString(managedName);
managedNameが管理Stringです。
所属していません StackOverflow