Chcę odczytać dane z GtkListStore i zbudować excela przez phpExcel. Najpierw buduję plik php zgodnie z GtkListStore, następnie używam php i phpexcel lib do kompilacji i budowy pliku execl.
W moim kodzie gtk (kompilowanym w środowisku MinGW) używam execvp(cmd[0], (const char **)cmd);
do wywołania polecenia zewnętrznego -- php. W rzeczywistości cmd[0]
to php.exe, a cmd[1], cmd[2] ... są parametrami dla php. Po wywołaniu polecenia php moje główne okno gtk zostaje zamknięte i zamyka mój program gtk.
Jak mogę zapobiec zamknięciu programu głównego przez polecenie php? Czy powinienem użyć czegoś innego zamiast execvp
? Dziękuję Ci.
2 odpowiedzi
execvp()
i znajomi zastępują bieżący proces innym procesem, więc nie jest niespodzianką, że program się kończy. Użyj g_spawn_sync()
lub powiązana funkcja - która uruchomi twój program php, a następnie przywróci sterowanie do oryginalnego programu.
Pozwól, że odpowiem na własne pytanie. Poniżej znajduje się podsumowanie tego, co wyszukiwałem i próbowałem w ciągu ostatnich kilku dni. Nie ma nic nowego, ale może przyda się takiemu nowicjuszowi jak ja.
Po pierwsze, dziękuję pomidorowi. Aby uniknąć mojego problemu w GTK, musi używać g_spawn_sync
lub powiązanych funkcji. Jeśli twoje polecenie jest ścieżką bezwzględną, nie musisz używać flagi G_SPAWN_SEARCH_PATH
, w przeciwnym razie upewnij się, że używasz flagi.
Poniżej znajduje się coś związanego w środowisku MinGW
.
-> gspawn-win32-helper.exe
W MinGW, aby używać g_spawn_sync, musi mieć zainstalowane gspawn-win32-helper.exe
. Kiedy instalowałem środowisko GTK, wyodrębniłem tylko przydatny plik lib lub exe, który uważam za przydatny, a następnie przegapiłem gspawn-win32-helper.exe i spowodował to problem -- Failed to execute helper program (No such file or directory)
wspomniany w powyższych komentarzach. Po rozpakowaniu gspawn-win32-helper.exe z ftp:/ /ftp.gtk.org/pub/glib/2.10/win32/glib-2.10.0.zip i instalacja, g_spawn_sync zadziałało.
-> W przypadku kanonicznych ścieżek Windows działają zarówno podwójne ukośniki odwrotne, jak i pojedyncze ukośniki do przodu, np. działają c:/foo/bar i c:\foo\bar.
Podobne pytania
Nowe pytania
gtk
GTK (dawniej GTK +) to zestaw narzędzi do tworzenia graficznych interfejsów użytkownika (GUI) z kompatybilnością między platformami i łatwym w użyciu API.