CreateProcess Programm mit Datei öffnen
-
Wo genau liegt das Problem? Du machst eben einfach
STARTUPINFO si;
zuSTARTUPINFOA si;
!?
-
ooohhh man bin ich ein gimp
ich hab LPSTARTUPINFOA benutzt (weil er das ja gebracht hat) und wundere mich warum es nicht geht...
VIELEN DANK an alle und besonders an dot
Jetzt hätte ich aber noch eine kleine Frage zum Verständnis. Würde mich freuen wenn du mir die beantwortest.
1.Gibt es evtl. irgendwo Literatur mit Beispielen die, diese ganze Konvertierungsalgorithmen behandelt(finde leider nix)
2. Was ist anderst wenn ich auf MBCS umstelle?
-
lulu32 schrieb:
1.Gibt es evtl. irgendwo Literatur mit Beispielen die, diese ganze Konvertierungsalgorithmen behandelt(finde leider nix)
Von was genau für "Konvertierungsalgorithmen" sprichst du?
lulu32 schrieb:
2. Was ist anderst wenn ich auf MBCS umstelle?
Es werden andere Präprozessor Makros definiert. Dein konkretes Beispiel wird in seiner aktuellen Form davon allerdings kaum beeinflusst werden.
-
ich meine z.B. wo sowas const_cast<char*> behandelt wird.
es gibt ja noch mehr sachen, string to char, cstring, char[], char*, TCHAR, wstring, LPTSTR usw... (ganz wirr durcheinander weil es so wirr in meinem kopf ist
)
wie man halt das alles irgendwie hin und her bekommt.
-
Casts sind C++ Basics und werden in jedem guten Grundlagenbuch behandelt. const_cast ist jedenfalls nur in den seltensten Fällen tatsächlich eine gute Idee. In diesem Fall hier ist es imo ein hässlicher Hack und relativ grenzwertig, allerdings ist es einer der seltenen Fälle, wo der const_cast zumindest nicht direkt einfach nur falsch ist...
char, char[] und char* sind Basics, string und wstring sind Teil der Standardbibliothek, TCHAR ist ein typedef, das je nachdem ob UNICODE definiert ist oder nicht dem passenden Typ entspricht (WCHAR oder char), LPTSTR ist ein typedef und entspricht einem TCHAR* (Long Pointer to TCHAR STRing, siehe auch hier)...
-
danke für die antwort, aber das ist mir soweit schon klar was es ist...
nur wenn man wieder funktionen nutzen will und dann den ganzen käse umwandeln muss, da kommt mir immer das grauen...
-
Ich rate Dir: verwende "std::wstring"...
-
Würd ich auch, nur dann muss man eben bedenken, dass man den String nicht direkt an CreateProcessW() übergeben kann, sondern zuerst z.B. in einen entsprechenden std::vector kopieren muss...
-
Ich verwende immer _wcsdup und free
-
Hier mal ein kleines Beispiel wie ich es evtl. machen würd:
#include <algorithm> #include <memory> #include <string> #define WIN32_LEAN_AND_MEAN #define NOMINMAX #include <windows.h> std::unique_ptr<wchar_t[]> makeCString(const std::wstring& str) { std::unique_ptr<wchar_t[]> a(new wchar_t[str.length() + 1]); std::copy(begin(str), end(str), &a[0]); a[str.length()] = L'\0'; return a; } int main() { std::wstring command = L"notepad bla.txt"; STARTUPINFOW si = {0}; si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW | STARTF_FORCEONFEEDBACK; si.wShowWindow = SW_SHOWNORMAL; PROCESS_INFORMATION pi; CreateProcessW(nullptr, &makeCString(command)[0], nullptr, nullptr, FALSE, 0U, nullptr, nullptr, &si, &pi); WaitForSingleObject(pi.hProcess, INFINITE); }