Comment passer un bloc d’environnement std :: ssortingng à CreateProcess?

J’essaie actuellement d’utiliser CreateProcess avec les variables Path, Arguments et Environment. Mes variables sont stockées dans des chaînes.

Dans l’exemple ci-dessous, filePath et cmdArgs fonctionnent correctement, mais je ne peux pas utiliser les envVars.

std::ssortingng filePath = "C:\\test\\DummyApp.exe"; std::ssortingng cmdArgs = "Arg1 Arg2 Arg3"; std::ssortingng envVars = "first=test\0second=jam\0"; // One //LPTSTR testStr = "first=test\0second=jam\0"; // Two CreateProcess( LPTSTR(filePath.c_str()), //path and application name LPTSTR(cmdArgs.c_str()), // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable TRUE, // Set handle inheritance 0, // Creation flags LPTSTR(envVars.c_str()), // environment block //testStr //this line works NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_INFORMATION structure 

)

Lorsque j’exécute ce code, l’erreur qui se produit est “erreur 87: le paramètre est incorrect”.

Ce que je ne comprends pas, c’est que si je commente la ligne “one” et la remplace par la ligne “two” (et fais le swap correspondant dans l’appel de fonction), alors cela fonctionne correctement.

Le constructeur de std::ssortingng vous avez utilisé copiera "first=test\0second=jam\0" jusqu’au premier \0 (chaîne de style C).

Pour passer toute la chaîne, utilisez un autre constructeur :

 std::ssortingng envVars("first=test\0second=jam\0", 22); ^^^^^^^^^^^^^^^^^^^^^^^^ ^ | 22 characters -------+