On Lundi 13 Mars 2006 19:06, Edgar Bonet wrote:
> Bon, visiblement le C et le C++ c'est pas pareil sur ce point. Moi je
> suis C, mais j'ai essayé de jouer avec le compilo C++ (g++ 3.4.1).
Comme dit dans mon précédent courriel, ça compile bien avec g++-3.3. Pas
avec le 3.4 ?
> (void *) m_TestRecAlignment = dlsym(m_libt, "TestRecAlignment");
>
> donne
>
> error: ISO C++ forbids cast to non-reference type used as lvalue
>
> C'est en gros le message d'erreur que tu avais, en plus clair. Si
> j'enlève le cast à gauche :
>
> error: invalid conversion from `void*' to `bool (*)(TModuleRec*)'
>
> OK, je remets le cast, mais à droite, comme tout le monde, et là il est
> content. Après tout c'est plus logique de caster la valeur au type de la
> variable d'accueil que le contraire. Donc, le code qui plaît à g++ :
>
> m_libt = dlopen(TOKENIZER_SO, RTLD_LAZY);
> if (m_libt) {
> m_TestRecAlignment = (bool (*)(TModuleRec *))
> dlsym(m_libt, "TestRecAlignment");
> m_Compile = (bool (*)(TModuleRec *, char*, bool, bool))
> dlsym(m_libt, "Compile");
> m_Version = (byte (*)()) dlsym(m_libt, "Version");
> }
>
> Si tu ne trouves pas ça très lisible (normal si tu as pas bu le C au
> biberon), fais des typedefs pour ces types de fonctions.
Fouillaillailla ! Faut tout recaster dans tous les sens, quoi.
J'ai bu du C au biberon, mais sans abuser, et je suis rapidement passé à
une boisson de grand : le python ;o)
Merci pour les explications !
--
Frédéric
http://www.gbiloba.org