2012-08-31 62 views
0

我想從GtkListStore讀取數據並通過phpExcel構建一個excel。首先,我根據GtkListStore構建一個php文件,然後使用php和phpexcel lib編譯和構建execl文件。gtk - 調用外部命令後,如何防止它關閉gtk主窗口

在我的gtk代碼中(使用MinGW環境編譯),我使用execvp(cmd[0], (const char **)cmd);來調用外部命令-php。實際上,cmd[0]是php.exe和cmd [1],cmd [2] ...是php的參數。調用php命令後,我的gtk主窗口關閉,它退出我的gtk程序。

如何防止php命令退出主程序?我應該使用別的什麼而不是execvp?謝謝。

回答

0

execvp()和朋友用另一個進程替換當前進程,所以你的程序退出並不奇怪。使用g_spawn_sync()或相關函數 - 將運行您的php程序,然後將控制返回到您的原始程序。

+0

感謝ptomato。我認爲'g_spawn_sync'就是我想要的。但它沒有奏效。我的程序正在'MinGW'中運行。使用'if(!g_spawn_sync(NULL,argv,NULL,0,NULL,NULL,&out,&stder,&exit,&error))'會輸出錯誤信息'無法執行幫助程序(沒有這樣的文件或目錄)'。 'argv'是'char * argv [] = {「ls」,NULL}' - 一個簡單的'ls'命令。它有什麼問題? – warem

+0

確保在標誌中使用'G_SPAWN_SEARCH_PATH',否則將不會找到'ls'命令,因爲它不在當前目錄中。 – ptomato

+0

我剛剛在家裏的純Linux環境中試過上面提到的代碼。它仍然沒有工作。但是,如果我使用絕對路徑,例如「/ bin/ls」,它就可以工作。但是,當我在辦公室裏,在MinGW環境下運行程序時,我嘗試了絕對路徑和相對路徑,但都沒有成功。所以,我現在有點困惑。是關於'MinGW'環境的問題嗎?還有一件事,我在MinGW中使用gtk2.10.11(一個非常舊的版本),並在家中使用gtk2.24.6。這是版本問題嗎? – warem

0

讓我回答我自己的問題。接下來是對我在過去幾天內搜索和嘗試的內容的總結。它沒有新東西,但可能對像我這樣的新手有用。

首先,感謝ptomato。爲了避免我在GTK中遇到的問題,它必須使用g_spawn_sync或相關函數。如果您的命令是絕對路徑,則不必使用標誌G_SPAWN_SEARCH_PATH,否則,請確保使用該標誌。

以下是一些與MinGW環境相關的內容。

- > gspawn-win32-helper.exe
在MinGW中,要使用g_spawn_sync,必須安裝gspawn-win32-helper.exe。當我安裝GTK環境時,我只提取了有用的lib或exe文件,我認爲它很有用,於是我錯過了gspawn-win32-helper.exe,導致了上述註釋中提到的問題 - Failed to execute helper program (No such file or directory)。從ftp://ftp.gtk.org/pub/glib/2.10/win32/glib-2.10.0.zip提取gspawn-win32-helper.exe並安裝後,g_spawn_sync工作。

- >對於規範Windows路徑,雙反斜槓和單斜槓工作,例如c:/ foo/bar和c:\ foo \ bar都可以工作。