型変換


MOONEY  2007-05-23 03:59:25  No: 65162

お世話になっております。VC++初心者で型変換について
お尋ねします。

LPVOID lpMsgBuf;

と、変数を宣言しMessageBoxで上記変数の中身を表示したい
のですが、lpMsgBufをString型にするにはどうすればいいの
でしょうか。。。


瀬戸っぷ  2007-05-23 09:30:01  No: 65163

型が不明(一応VOID型へのポインタ)で、どこを指しているかも不明なポインタのナニを表示したいのでしょうか?
あと、String型ってなんでしょうか?
CString???


モーヲタ  2007-05-23 15:09:39  No: 65164

どっかで見たことあるこの宣言及び変数名(LPVOID lpMsgBuf)と思ったら
もしかしてGetLastError()関数でエラーメッセージを見る時の
MSDNのサンプルの変数宣言と全く同じですね。でもあくまで
こちらの勝手な推測でしかないので瀬戸っぷさんのおっしゃっている
通りなのですが・・・。

以下MSDNのGetLastError()関数でのエラーメッセージ表示サンプル

LPVOID lpMsgBuf;

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
              FORMAT_MESSAGE_FROM_SYSTEM | 
              FORMAT_MESSAGE_IGNORE_INSERTS,
              NULL,
              GetLastError(),
              MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // デフォルト言語
              (LPTSTR) &lpMsgBuf,
              0,
              NULL 
            );

//ここで必要に応じて lpMsgBuf に関する処理を行う

// ...

MessageBox( NULL, lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );

LocalFree( lpMsgBuf );

そしてまたこちらの勝手な推測として
String型を.NETクラスのSystem::Stringクラスと勝手に解釈して
おそらく.NETのMessageBox::Show()にて表示しようとして
【型が違います。】とコンパイラに怒られたとこれまた推測・・・。
よって、以下の様に型変換する。

例:
//〜途中省略〜
MessageBox::Show( Convert::ToString((char *)lpMsgBuf), S"Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
//VC++.NET2003では
//MessageBox::Show( (char *)lpMsgBuf, S"Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
//でもコンパイルは通った。VC2005は未確認。

仮にVC++ 6.0だとすると、
単純に
::MessageBox( NULL, (const char *)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
だけで良いと思いますが・・・。

すごい勝手な推測をこちらでしてます。
せめて開発環境とプロジェクトを提示しないと的確な
回答ができません。


MOONEY  2007-05-23 18:36:32  No: 65165

みなさま。
ご丁寧にありがとうございます。そしてお粗末な書き込みで
大変申し訳ございませんでした。

モーヲタ様の仰るとおりでございます。大変参考になりました。
どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加