質問

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です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top