2011-01-04 23 views
4

文字列をCreateProcess関数に渡して、この関数をすべての操作に使用できるようにしたいとします。どのように正しく行うには?CreateProcess関数に文字列を渡す方法は?

以下

は私のコードです:

CString ExecuteExternalProgram(CString pictureName) 
{ 
    CString parameterOne = _T(" -format \"%h\" C:\\"); 
    CString filename = pictureName; 
    CString parameterLast = _T("\""); 
    CString parameterFull = parameterOne + filename + parameterLast; 

    CreateProcess(_T("C:\\identify.exe"), parameterFull,0,0,TRUE, 
     NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo); 
    CloseHandle(wPipe); 

    ....... 
} 

エラー:

エラー2エラーC2664: 'CreateProcessW': 'LPWSTR' C 'にATL :: CStringの' からのパラメータ2を変換することはできません:\ A

CreateProcess(L"C:\\identify.exe",csExecute.GetBuffer(),0,0,TRUE, 
    NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo); 

CreateProcess()が書き込みを望んでいる:.cppファイル

答えて

2

あなたのような何かをする必要があります何らかの理由でコマンドラインパラメータ用のバッファーを使用することができません。そのため、CStringの暗黙的な変換は起こりません(constポインタの場合にのみ暗黙の変換が行われるため)。

これは問題が発生していない場合は、実行中のエラーまたは予期しない動作の詳細を投稿してください。

例として、以下は、それが与えられていますコマンドラインダンプ少しutiltyプログラム実行します:私は、コード内で「.GetBufferを()」を入れている

int main() { 
    CString csExecute = "some string data"; 

    STARTUPINFO sInfo = {0}; 
    sInfo.cb = sizeof(sInfo); 
    PROCESS_INFORMATION pInfo = {0}; 

    CreateProcess(L"C:\\util\\echoargs.exe",csExecute.GetBuffer(),0,0,TRUE, 
     NORMAL_PRIORITY_CLASS,0,0,&sInfo,&pInfo); 

    return 0; 
} 
+0

を。しかし、それでもエラーです。私は上記の質問を更新しました。 – karikari

+0

私はもう少し進歩しました。再び私は上記のコードを更新しました。しかし、まだエラーがあります。助けが必要です。 – karikari

+0

問題が解決しました!私はparameterFull.GetBuffer()を使用します。ありがとうございます – karikari

関連する問題