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.

0
warem 31 sierpień 2012, 09:30

2 odpowiedzi

Najlepsza odpowiedź

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.

0
ptomato 3 wrzesień 2012, 12:46

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.

0
warem 6 wrzesień 2012, 12:17