2011-03-31 6 views

Répondre

1

Vous devez déplacer vos prototypes de fonction dans un fichier d'en-tête séparé. SWIG peut traiter cela et générer les choses nécessaires pour vous. Vous pouvez suivre le SWIG tutorial et particulièrement faire attention à la section SWIG pour le vraiment paresseux qui montre comment vous pouvez éviter d'avoir à maintenir un fichier d'interface SWIG séparé. Combinez ceci avec les informations de la page SWIG and PHP et vous devriez être capable de faire fonctionner les choses. Notez que SWIG ne supporte pas PHP4.

Peut-être que vous pouvez commencer par essayer quelque chose comme ce qui suit et à l'utiliser comme l'entrée à la commande 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

J'ai fait quelque chose comme ça basé sur SWIG TUTORIAL et SWIG et PHP page mais il y a des méthodes fournies par libcurl qui ne sont pas supportées et aussi longtemps que il y a beaucoup de pointeurs dans mon code, il devient difficile de dire à SWIG comment les gérer. – user683831

+0

libcurl ne devrait pas importer dans ce cas. SWIG doit seulement générer du code pour vos propres fonctions. Selon [this] (http://www.swig.org/Doc2.0/SWIG.html#SWIG_nn15) SWIG peut gérer les pointeurs très bien. – trenki

+0

Pourquoi ne pas écrire le code directement en PHP? PHP supporte également libcurl. – trenki

0

Certaines choses qui souvent ne fonctionnent pas bien dans plusieurs langues, avec l'utilisation de SWIG :

  1. ne pas jeter les exceptions en dehors de l'interface que vous souhaitez exposer à SWIG
  2. ne pas retourner ou besoin en tant que paramètres, tableaux C-premières dans l'interface que vous présentez. (Enveloppez-les dans des structures de préférence)
  3. Ecrivez les fichiers d'interface SWIG qui incluent les fichiers d'en-tête que vous souhaitez exposer dans votre interface à PHP. N'insérez pas SWIG #ifdefs dans le code C lui-même ...
Questions connexes