0

CEdit があり、これを使用してデータを抽出したいと考えています。

wchar_t *temp = (wchar_t*)dialog.editbox.GetBuffer(0);
dialog.editbox.ReleaseBuffer();

今、私はこのテキストを次のようなオブジェクトポインタに保存したい:

selectedShape->setText(temp);

これは完璧に機能しますが、後でファイルを保存すると、テキストがオブジェクトに含まれなくなるため、メソッドの範囲内にいる場合に限ります。

wchar_t*これを後で保存する方法を知っている人はいますか?

4

2 に答える 2

2

@Prætorianが言うように、あなたのコードにはCString、バッファを取得しているクラスで作業するステップが欠けているようです。

http://msdn.microsoft.com/en-us/library/aa314880(v=vs.60).aspx

可能な限り、動的メモリ ソリューションの使用は避けてください。代わりに、temp独自のメモリを管理する CString オブジェクトとして by 値を渡します。ストック ウィンドウsetText関数は、文字列ポインター (CString が暗黙的にキャストできる) を受け取り、基になる文字列データをコピーします。独自のオブジェクトを作成する場合は、値によって CString オブジェクトをメンバーとして保持します。

(私はいつもの「90 年代と呼ばれ、彼らはフレームワークを取り戻したい」という免責事項をここに追加します 。Qt を試してください。)

于 2012-10-08T16:22:31.443 に答える
1

ポインターはスコープ外のtempデータを指しているため、値を格納するためにメモリを動的に割り当てる必要があります。このようなものが動作するはずです:

// Updated to use wstring, thanks praetorian
std::wstring tempStr((wchar_t*)dialog.editbox.GetBuffer(0));

または:

int length = /*figure out the length here*/;
wchar_t *temp = new wchar_t[length];
memcpy(temp, dialog.editbox.GetBuffer(0), length*sizeof(wchar_t));
// dont forget to delete it like this: delete [] temp;
于 2012-10-08T16:17:31.900 に答える