UnicodeのCreateProcess

[戻る]
おんじ [E-Mail] 2009/05/23(土) 15:55:00
はじめまして。C++ を学んでいるのですが、
行き詰ってしまいましたのでご教授いただけないでしょうか。

CreateProcessを使用して、外部のプログラムを呼び出したいのですが、


第1引数に NULL を指定すると
「ハンドルされていない Win32 の例外が発生しました」となり次へ進めません。
対処方法などがありましたら教えていただけないでしょうか。
よろしくお願い致します。

// エラーになってしまう部分
CreateProcess(NULL, L"notepad.exe", NULL, NULL, FALSE, 
     NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);


・環境
OS  : WinXP SP2
IDE : VS 2005 SP1
文字セット : Unicode

subaru 2009/05/23(土) 16:30:27
http://msdn.microsoft.com/ja-jp/library/cc429066.aspx

第2引数のlpCommandLineの説明に固定文字列は渡せないと書いてあります。
実行したいファイル名をローカル変数に取ればよいでしょう。

おんじ [E-Mail] 2009/05/23(土) 21:38:20
[[解決]]
subaru様 ありがとうございます。

MBCSの場合は、問題なかったのでどこかおかしいのかと思っておりました。

どうもありがとうございます。

aetos 2009/05/25(月) 16:27:42
> MBCSの場合は、問題なかったのでどこかおかしいのかと思っておりました。

MBCS 版は内部で Unicode 版を呼んでいます。
この際、内部で書き換え可能なバッファを確保し、そこに Unicode に変換した文字列を
入れてから CreateProcessW を呼んでいるので、CreateProcessW の第2引数に渡される
のは、プログラマが指定した固定文字列ではなく、CreateProcessA が内部で確保した書
き換え可能文字列バッファになります。
そのため、MBCS 版では動いてしまうわけです。
が、MBCS 版でも明示的に書き換え可能バッファを渡す方が望ましいでしょう。

古いスレッドには追加発言できません。