je découvre swig et je souhaite prototyper un wrapper python pour une
bibliothèque (en fait une dll) dont j'ai également le .h (ça tombe bien).
Je bute sur un endroit du .h qui définit de nouveaux types et en même
temps des types pointeurs sur les types définis.
Exemple :
typedef enum pborca_type
{
PBORCA_APPLICATION,
PBORCA_DATAWINDOW,
PBORCA_FUNCTION,
PBORCA_MENU,
PBORCA_QUERY,
PBORCA_STRUCTURE,
PBORCA_USEROBJECT,
PBORCA_WINDOW,
PBORCA_PIPELINE,
PBORCA_PROJECT,
PBORCA_PROXYOBJECT,
PBORCA_BINARY
} PBORCA_TYPE, FAR *PPBORCA_TYPE;
Mon fichier d'interface est le suivant :
8<------8<------8<------8<------8<------8<------8<------8<------8<------
%module pborca
%{
#include "pborca.h"
%}
Et je bute sur l'erreur
pborca.h(243): Error: Syntax error in input(1).
(La ligne 243 de pborca.h est le début du typedef suivant).
En cherchant un peu j'ai vu qu'on peu détailler les portions de l'api
qu'on souhaite exposer en n'incluant pas directement le .h avec la 2ème
directive include mais en spécifiant les fonctions ou les types.
Par essai et erreur j'ai vu que si je spécifie un typedef sans la partie
FAR * ça passe mais mon wrapper ne contient que ce type. Et je n'arrive
pas à définir mon type pointeur. De plus je devrais recopier tout le .h
dans le .i ?
Bref un peu d'aide serait la bienvenue.
Au cas où, l'interface pborca.h est disponible publiquement : c'est
prévu pour ouvrir les projets Powerbuilder à des outils externes.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Amaury Forgeot d'Arc
Bonsoir,
Bonjour,
je découvre swig et je souhaite prototyper un wrapper python pour une bibliothèque (en fait une dll) dont j'ai également le .h (ça tombe bien).
Je bute sur un endroit du .h qui définit de nouveaux types et en même temps des types pointeurs sur les types définis. Exemple : typedef enum pborca_type { PBORCA_APPLICATION, PBORCA_DATAWINDOW, PBORCA_FUNCTION, PBORCA_MENU, PBORCA_QUERY, PBORCA_STRUCTURE, PBORCA_USEROBJECT, PBORCA_WINDOW, PBORCA_PIPELINE, PBORCA_PROJECT, PBORCA_PROXYOBJECT, PBORCA_BINARY
} PBORCA_TYPE, FAR *PPBORCA_TYPE;
Mon fichier d'interface est le suivant : 8<------8<------8<------8<------8<------8<------8<------8<------8<------ %module pborca %{ #include "pborca.h" %}
Et je bute sur l'erreur pborca.h(243): Error: Syntax error in input(1).
(La ligne 243 de pborca.h est le début du typedef suivant).
En cherchant un peu j'ai vu qu'on peu détailler les portions de l'api qu'on souhaite exposer en n'incluant pas directement le .h avec la 2ème directive include mais en spécifiant les fonctions ou les types.
Par essai et erreur j'ai vu que si je spécifie un typedef sans la partie FAR * ça passe mais mon wrapper ne contient que ce type. Et je n'arrive pas à définir mon type pointeur. De plus je devrais recopier tout le .h dans le .i ?
Je pense que c'est à cause du mot FAR. Swig ne connait que le C/C++ standard, pas les extensions/adaptations du compilateur Microsoft. FAR doit dater de l'époque MS/DOS... D'ailleurs, FAR est défini dans windows.h (ou windef.h), il suffit de faire pareil ::
%module pborca
#define FAR %{ #include "pborca.h" %}
Tu auras peut-être besoin de faire d'autres choses semblables, comme :: #define __declspec__() Si un mot n'est pas nécessaire à Swig, un petit #define et basta!
-- Amaury Forgeot d'Arc
Bonsoir,
Bonjour,
je découvre swig et je souhaite prototyper un wrapper python pour une
bibliothèque (en fait une dll) dont j'ai également le .h (ça tombe bien).
Je bute sur un endroit du .h qui définit de nouveaux types et en même
temps des types pointeurs sur les types définis.
Exemple :
typedef enum pborca_type
{
PBORCA_APPLICATION,
PBORCA_DATAWINDOW,
PBORCA_FUNCTION,
PBORCA_MENU,
PBORCA_QUERY,
PBORCA_STRUCTURE,
PBORCA_USEROBJECT,
PBORCA_WINDOW,
PBORCA_PIPELINE,
PBORCA_PROJECT,
PBORCA_PROXYOBJECT,
PBORCA_BINARY
} PBORCA_TYPE, FAR *PPBORCA_TYPE;
Mon fichier d'interface est le suivant :
8<------8<------8<------8<------8<------8<------8<------8<------8<------
%module pborca
%{
#include "pborca.h"
%}
Et je bute sur l'erreur
pborca.h(243): Error: Syntax error in input(1).
(La ligne 243 de pborca.h est le début du typedef suivant).
En cherchant un peu j'ai vu qu'on peu détailler les portions de l'api
qu'on souhaite exposer en n'incluant pas directement le .h avec la 2ème
directive include mais en spécifiant les fonctions ou les types.
Par essai et erreur j'ai vu que si je spécifie un typedef sans la partie
FAR * ça passe mais mon wrapper ne contient que ce type. Et je n'arrive
pas à définir mon type pointeur. De plus je devrais recopier tout le .h
dans le .i ?
Je pense que c'est à cause du mot FAR.
Swig ne connait que le C/C++ standard, pas les extensions/adaptations du
compilateur Microsoft. FAR doit dater de l'époque MS/DOS...
D'ailleurs, FAR est défini dans windows.h (ou windef.h), il suffit de
faire pareil ::
%module pborca
#define FAR
%{
#include "pborca.h"
%}
Tu auras peut-être besoin de faire d'autres choses semblables, comme ::
#define __declspec__()
Si un mot n'est pas nécessaire à Swig, un petit #define et basta!
je découvre swig et je souhaite prototyper un wrapper python pour une bibliothèque (en fait une dll) dont j'ai également le .h (ça tombe bien).
Je bute sur un endroit du .h qui définit de nouveaux types et en même temps des types pointeurs sur les types définis. Exemple : typedef enum pborca_type { PBORCA_APPLICATION, PBORCA_DATAWINDOW, PBORCA_FUNCTION, PBORCA_MENU, PBORCA_QUERY, PBORCA_STRUCTURE, PBORCA_USEROBJECT, PBORCA_WINDOW, PBORCA_PIPELINE, PBORCA_PROJECT, PBORCA_PROXYOBJECT, PBORCA_BINARY
} PBORCA_TYPE, FAR *PPBORCA_TYPE;
Mon fichier d'interface est le suivant : 8<------8<------8<------8<------8<------8<------8<------8<------8<------ %module pborca %{ #include "pborca.h" %}
Et je bute sur l'erreur pborca.h(243): Error: Syntax error in input(1).
(La ligne 243 de pborca.h est le début du typedef suivant).
En cherchant un peu j'ai vu qu'on peu détailler les portions de l'api qu'on souhaite exposer en n'incluant pas directement le .h avec la 2ème directive include mais en spécifiant les fonctions ou les types.
Par essai et erreur j'ai vu que si je spécifie un typedef sans la partie FAR * ça passe mais mon wrapper ne contient que ce type. Et je n'arrive pas à définir mon type pointeur. De plus je devrais recopier tout le .h dans le .i ?
Je pense que c'est à cause du mot FAR. Swig ne connait que le C/C++ standard, pas les extensions/adaptations du compilateur Microsoft. FAR doit dater de l'époque MS/DOS... D'ailleurs, FAR est défini dans windows.h (ou windef.h), il suffit de faire pareil ::
%module pborca
#define FAR %{ #include "pborca.h" %}
Tu auras peut-être besoin de faire d'autres choses semblables, comme :: #define __declspec__() Si un mot n'est pas nécessaire à Swig, un petit #define et basta!
-- Amaury Forgeot d'Arc
Sébastien Kirche
Le 30 mai 2007 à 00:45, Amaury Forgeot d'Arc a formulé :
Je pense que c'est à cause du mot FAR. Swig ne connait que le C/C++ standard, pas les extensions/adaptations du compilateur Microsoft. FAR doit dater de l'époque MS/DOS...
Je ne sais pas si FAR est spécifique MS mais effectivement ça doit dater du DOS et de la joie de programmer sur des segments mémoire de 64K.
D'ailleurs, FAR est défini dans windows.h (ou windef.h), il suffit de faire pareil ::
%module pborca
#define FAR %{ #include "pborca.h" %}
Tu auras peut-être besoin de faire d'autres choses semblables, comme :: #define __declspec__() Si un mot n'est pas nécessaire à Swig, un petit #define et basta!
OK.
#define FAR a résolu le problème cité, mais ça bute maintenant ailleurs. Je pense que ça doit pouvoir se résoudre de la même façon.
Merci du coup de main. -- Sébastien Kirche
Le 30 mai 2007 à 00:45, Amaury Forgeot d'Arc a formulé :
Je pense que c'est à cause du mot FAR.
Swig ne connait que le C/C++ standard, pas les extensions/adaptations
du compilateur Microsoft. FAR doit dater de l'époque MS/DOS...
Je ne sais pas si FAR est spécifique MS mais effectivement ça doit dater
du DOS et de la joie de programmer sur des segments mémoire de 64K.
D'ailleurs, FAR est défini dans windows.h (ou windef.h), il suffit de
faire pareil ::
%module pborca
#define FAR
%{
#include "pborca.h"
%}
Tu auras peut-être besoin de faire d'autres choses semblables, comme
::
#define __declspec__()
Si un mot n'est pas nécessaire à Swig, un petit #define et basta!
OK.
#define FAR a résolu le problème cité, mais ça bute maintenant ailleurs.
Je pense que ça doit pouvoir se résoudre de la même façon.
Le 30 mai 2007 à 00:45, Amaury Forgeot d'Arc a formulé :
Je pense que c'est à cause du mot FAR. Swig ne connait que le C/C++ standard, pas les extensions/adaptations du compilateur Microsoft. FAR doit dater de l'époque MS/DOS...
Je ne sais pas si FAR est spécifique MS mais effectivement ça doit dater du DOS et de la joie de programmer sur des segments mémoire de 64K.
D'ailleurs, FAR est défini dans windows.h (ou windef.h), il suffit de faire pareil ::
%module pborca
#define FAR %{ #include "pborca.h" %}
Tu auras peut-être besoin de faire d'autres choses semblables, comme :: #define __declspec__() Si un mot n'est pas nécessaire à Swig, un petit #define et basta!
OK.
#define FAR a résolu le problème cité, mais ça bute maintenant ailleurs. Je pense que ça doit pouvoir se résoudre de la même façon.