2011-01-04 15 views
4

Ich möchte eine Zeichenfolge an meine CreateProcess-Funktion übergeben, damit ich diese Funktion für alle meine Operationen verwenden kann. Wie mache ich das richtig?Wie übergibt man eine Zeichenfolge an die CreateProcess-Funktion?

Unten ist mein Code:

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); 

    ....... 
} 

Fehler:

Fehler 2 Fehler C2664: 'CreateProcessW': nicht Parameter 2 aus 'ATL :: CString' auf 'LPWSTR' c umwandeln kann: \ a CPP

Antwort

2

Sie werden tun müssen, um so etwas wie:

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

CreateProcess() will einen Schreib Puffer für den Befehlszeilenparameter aus irgendeinem Grund, so dass die implizite Konvertierung von CString in einen einfachen alten Zeiger nicht passiert (da es nur die implizite Konvertierung durchführt, wenn es sich um einen const-Zeiger handelt).

Wenn dies nicht das Problem ist, auf das Sie stoßen, posten Sie weitere Details zu dem Fehler oder dem unerwarteten Verhalten, auf das Sie stoßen.

Als Beispiel führt die folgenden ein wenig utilty Programm, das die Kommandozeilen-Dumps es gegeben hat:

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

ich gesetzt haben „.GetBuffer()“ in den Code. Aber es ist immer noch ein Fehler. Ich habe meine Frage oben aktualisiert. – karikari

+0

Ich habe etwas mehr Fortschritte gemacht. Wieder habe ich meinen obigen Code aktualisiert. Aber immer noch Fehler .. brauche Hilfe. – karikari

+0

Problem gelöst! Ich benutze ParameterFull.GetBuffer(). Danke – karikari

Verwandte Themen