Bonjour,
J'essaie actuellement de créer un module basique permettant d'utiliser la lib xcb via ruby sous linux.
Pour ça j'essaie d'utiliser swig. J'ai déjà fait un test basique avec un fichier pour swig:
1 2 3 4 5 6 7 8 9 10 11 12 13
| %module ruxcby
%{
#include <xcb/xcb.h>
#include <xcb/xcb_util.h>
#include <xcb/xcb_aux.h
#include <xcb/xcb_atom.h>
#include <xcb/xcb_event.h>
%}
%include "/usr/include/xcb/xproto.h"
%include "/usr/include/xcb/xcb.h"
%include "/usr/include/xcb/xcb_atom.h"
%include "/usr/include/xcb/xcb_aux.h"
%include "/usr/include/xcb/xcb_event.h" |
C'est bourrin mais ça fonctionne plutôt bien une fois le module compilé. Le problème est que la syntaxe ruby est très proche du C. J'aimerais créer des classes avec des méthodes.
Je m'explique:
Dans le fichier xcb.h j'ai:
1 2 3 4 5
| typedef struct xcb_connection_t xcb_connection_t;
xcb_connection_t * xcb_connect(const char *displayname, int *screenp);
int xcb_flush( xcb_connection_t *);
uint32_t xcb_generate_id( xcb_connection_t *);
void xcb_disconnect(xcb_connection_t * ); |
l'idée serait d'avoir en ruby:
1 2 3 4 5
|
require 'ruxcby'
include Ruxcby
connection = Connection.new
connection.disconnect |
Pour ça après avoir lu la documentation, j'ai créer un fichier pour swig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
%module ruxcby
%{
#include <xcb/xcb.h>
#include <xcb/xproto.h>
%}
%import "/usr/include/xcb/xproto.h"
typedef struct xcb_connection_t {
} Connection;
%extend Connection {
Connection(const char *displayname, int *screenp)
{
Connection * c;
c = xcb_connect(displayname, screenp);
return c;
}
int flush()
{
return xcb_flush($self);
}
xcb_generic_event_t *wait_for_event()
{
return xcb_wait_for_event($self);
}
int connection_has_error()
{
return xcb_connection_has_error($self);
}
void disconnect()
{
return xcb_disconnect($self);
}
uint32_t generate_id()
{
return xcb_generate_id($self);
}
}; |
Et lors de la compliation j'ai le message suivant:
erreur: unknown type name ‘Connection’
Donc les questions sont:
1. est ce que c'est la bonne manière de générer des classes?
2. comment est ce que je pourrais résoudre ce problème?
Merci.
Partager