『Unicode文字セットを使用する』にしたときのコンパイルエラーの取り方

解決


うに  2007-09-14 19:43:37  No: 66346

Visual Studio 2005を使っています。
VC++にて、
『プロジェクト(P)』
『…のプロパティ(P)』
『構成プロパティ全般の文字セットを"Unicode文字セットを使用する"』
の設定にして、CreateProcessを使用したいのですが、上手く行きません。

ちょっと長いですが、コードを記します。

  PROCESS_INFORMATION pi0;
  STARTUPINFO si0;
  ZeroMemory(&si0, sizeof(si0));
  si0.cb = sizeof(si0);
  AfxMessageBox( L"CreateProcessW開始", MB_OK ); // ①    CreateProcessW(  NULL,
                            L"C:\\WINDOWS\\system32\\test.txt",
                            NULL,
                            NULL,
                            FALSE,
                            0,
                            NULL,
                            NULL,
                            &si0,
                            &pi0);
  AfxMessageBox( L"CreateProcessW終了", MB_OK ); // ②

①のメッセージボックスは上手く表示されるのですが、②が表示される前に『問題が発生したため、TODO: <ファイルの説明> を終了します。ご不便をおかけして申し訳ありません。』と表示され、アプリが終了してしまいます。
文字セットをUnicodeのままCreateProcessを正常動作させる方法をご存知の方、アドバイス頂けたら幸いです。よろしくお願い致します。


うに  2007-09-14 19:58:13  No: 66347

蛇足ですが、このページだと『// ①』の後にCreateProcessWが来てるので、コメントになってしまいますが、実際のプログラムでは、改行していてCreateProcessWがコンパイルされています。
  題名もコンパイルエラーとなっていますが、一応、コンパイルは通っています。
正確には、アプリ実行中の異常終了です。説明のミスが多くてすみませんが、何卒、アドバイスよろしくお願い致します。


Blue  2007-09-14 20:08:15  No: 66348

CreateProcessの第2引数はLPTSTRでLPCTSTRではないです。

ですので
>L"C:\\WINDOWS\\system32\\test.txt",
のような指定は出来ません。
ちゃんと文字列領域を取って渡しましょう。

CreateProcess Function
http://msdn2.microsoft.com/en-us/library/ms682425.aspx

今回なら

TCHAR cmd[] = _T("C:\\WINDOWS\\system32\\test.txt");

としてcmdを引数に指定する。

それと、
>AfxMessageBox( L"CreateProcessW開始", MB_OK ); 
_TマクロまたはTEXTマクロを使うべきでしょう。

>CreateProcessW(  NULL,

>PROCESS_INFORMATION pi0;
ですからWのつかないCreateProcess関数にしたほうがよいでしょう。

CreateProcessWを明に使うならSTARTUPINFOWを使ってください。


Blue  2007-09-14 20:09:59  No: 66349

訂正

>>PROCESS_INFORMATION pi0;
>ですからWのつかないCreateProcess関数にしたほうがよいでしょう。
>
>CreateProcessWを明に使うならSTARTUPINFOWを使ってください。

ではなく

>STARTUPINFO si0;
ですからWのつかないCreateProcess関数にしたほうがよいでしょう。

CreateProcessWを明に使うならSTARTUPINFOWを使ってください。

でした。


うに  2007-09-14 20:17:53  No: 66350

Blueさん、とても的確なアドバイス有難うございます。
こんな短時間で解決できるとは思いませんでした。
本当に有難うございます。


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

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






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