CreateProcess in Visual Studio 2005
-
Hallo zusammen.
Ich versuche seit einiger Zeit, ein CreateProzess() im Visual Studio 2005 zu machen, bekomme aber immer bei Ausführung des Befehls einen Speicherzugriffsfehler.
konkret nutzte ich bis vor kurzem VS03, damit funktionierte alles.
Wenn ich nun ein bestehendes VS03-Projekt im VS05 importiere und konvertiere, funzt auch alles.ABER
Wenn ich ein neues Projekt in VS05 erstelle und dort einen Prozess erstellen will, meckert er erstmal, daß CreateProzess() gerne noch ein "TEXT()" (siehe unten) will.
Gut, aber nach Anpassung linkt und compiliert er zwar, aber beim Ausführen gibt es eben besagten Speicherzugriffsfehler.Ich habe in den Projekteinstellungen schon die Runtime-Library auf "Multi-threaded Debug" umgestellt - ohne Erfolg.
Irgendwelche Ideen?
hier mal mein Code:
im VS03 - funzt:threadSuccess = CreateProcess(NULL, "C:\\Progging\\prozessA.exe", NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo_ProzessA, &pi_ProzessA);
im VC05 importiert - funzt
neues Project im VC05 - funzt nicht
threadSuccess = CreateProcess(NULL, TEXT("C:\\Progging\\prozessB.exe"), NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo_ProzessB, &pi_ProzessB);
-
Hast Du mal die Doku zu CreateProcess gelesen???
Der zweite Parameter muss beschreibbar sein!!!
http://windowssdk.msdn.microsoft.com/library/en-us/dllproc/base/createprocess.asp
Und das ab VS2005/3 statische Texte in eine eine Read-Only section geschrieben werden, erzeugt dies immer eine Exception...
=>LPTSTR szCmd = _tcsdup(_T("C:\\Progging\\prozessA.exe"); CreateProcess(NULL, szCmd, ...) free(szCmd);
-
hm, da steht aber:
"...The Unicode version of this function, CreateProcessW, can modify the contents of this string..."ich will aber nicht die unicode Version nutzen.
naja und außerdem funzt das (nicht Unicode-Version) auch nicht (immer noch Speicherzugriffsfehler):
LPTSTR szCmd1 = TEXT("C:\\Progging\\prozessA.exe"); threadSuccess = CreateProcess(NULL, szCmd1, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo_ProzessA, &pi_ProzessA);
btw: in welcher Klasse ist "_tcsdup(_T())" definiert? in string.h findet der das nicht.
-
Du verwendest hier doch die Unicode-Version!!!!
AB VS2005 wird per default immer UNICODE gesetzt!
_tcsdup wird in <tchar.h> definiert...#include <windows.h> #include <stdio.h> #include <tchar.h>
-
thx!
das war die lösung!nochmals danke