2011-03-31 40 views

回答

1

您應該將函數原型移動到單獨的頭文件中。 SWIG可以處理併爲您生成所需的東西。您可以按照SWIG tutorial,特別注意SWIG的真正懶惰,它顯示瞭如何避免必須維護一個單獨的SWIG接口文件。

將此信息與SWIG and PHP頁中的信息結合起來,您應該能夠使事情順利進行。請注意,SWIG不支持PHP4。

也許你可以嘗試像下面出來,並用它作爲輸入到swig命令啓動的東西:

/* optim_wizard_5.h */ 

#ifdef SWIG 
%module optim_wizard_5 
%{ 
#include "optim_wizard_5.h" 
%} 
#endif 

/* Function prototypes to define later */ 
void *getCpc(void *ptr); 
float getCpc_max(float *arg); 
char *do_web_request(char *url); 
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp); 
float request_cpc(); 
+0

我已經完成了基於SWIG TUTORIAL,SWIG和PHP頁面的類似操作,但是libcurl提供的方法不受支持,只要我的代碼中有很多指針,很難說SWIG如何管理它們。 – user683831 2011-03-31 16:05:06

+0

libcurl在這種情況下應該不重要。 SWIG只需爲您自己的功能生成代碼。根據[this](http://www.swig.org/Doc2.0/SWIG.html#SWIG_nn15)SWIG可以很好地處理指針。 – trenki 2011-03-31 19:29:30

+0

爲什麼不能直接在PHP中編寫代碼? PHP也支持libcurl。 – trenki 2011-03-31 19:37:51

0

有些事情往往不跨語言很好地工作,使用痛飲:

  1. 不要亂扔要公開痛飲
  2. 不要返回或要求作爲參數,原C-陣列,你暴露的接口的接口以外的例外。 (最好將它們包裝在結構中)
  3. 在您的接口中寫入包含要在PHP界面中公開的頭文件的SWIG接口文件。不要將SWIG #ifdefs嵌入到C代碼本身中...