Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1168 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Appler une méthode C++ dans un shared object

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appler une méthode C++ dans un shared object

n°633821
Profil sup​primé
Posté le 06-02-2004 à 19:27:33  answer
 

Salut
Je bosse sous Solaris 8 en C++.
 
J'aimerais savoir s'il est possible d'ouvrir explicitement un .so avec dlopen et d'y appeler une méthode sur un objet. Le probleme, c'est que dlsym renvoie un void * , une fonction "C, ce qui n'est pas pareil qu'une méthode avec un this implicite.
Donc en C, quand je recupere l'adresse avec dlsym je fais (*f)().
Mais avec mon objet je fais quoi ? Un truc du genre (*f)(this,arguments) ? Et de toute façon je ne sais même pas comment s'appelle le symbole vu qu'il est décoré à la C++.
 
Existe t il un truc que je ne connais pas ?
 
Merci d'avance

mood
Publicité
Posté le 06-02-2004 à 19:27:33  profilanswer
 

n°633823
blackgodde​ss
vive le troll !
Posté le 06-02-2004 à 19:38:01  profilanswer
 

construis ton objet dans ton.so, puis exporte une fonction qui crée un de ces objets, et qui une autre qui le détruit.
Passe par une interface pour isoler l'implémentation dans le .so
et l'utilisation dans ton programme.


---------------
-( BlackGoddess )-
n°633824
Taz
bisounours-codeur
Posté le 06-02-2004 à 19:41:11  profilanswer
 

tu sais te servir d'un pointeur de fonction membre ?

n°633825
Profil sup​primé
Posté le 06-02-2004 à 19:44:37  answer
 

passe par une interface tu veux dire d'utiliser une classe avec des methodes virtuelles pures, de l'implémenter dans le .so, et de faire 2 fonctions extern "C" dans le .so qui retournent un pointeur sur l'interface c ca ?
 
j'y avais pensé mais je trouvais que c'etait moyen. Parce que quand on linke en automatique avec un .so, cad on le mat dans la ligne de commande de link, le linker se demerde bien pour aller appeler les méthodes dans le .so
je me disais que peut etre il y avait un moyen de faire pareil, mais a la main plutot que de laisser le compilo générer lui meme les dlopen et compagnie qui vont bien

n°633827
Profil sup​primé
Posté le 06-02-2004 à 19:46:57  answer
 

taz a écrit :

tu sais te servir d'un pointeur de fonction membre ?
 


 
pointeur de fonction membre ok admettons
mais pour le constructeur et le destructeur qui sont appelés implicitement, tu fais comment ?
et pour le nom du symbole qu'il faut passer à dlsym tu le connais comment ?

n°633835
Taz
bisounours-codeur
Posté le 06-02-2004 à 19:54:44  profilanswer
 

ché pas, mais je le sens impossible là

n°633840
Profil sup​primé
Posté le 06-02-2004 à 19:59:19  answer
 

taz a écrit :

ché pas, mais je le sens impossible là


 
bin moi aussi je pense que c pas possible, du moins proprement
il faudrait un truc qui te fait une sorte de représentation locale de la classe et qui va lui meme chercher les symboles.
Mais bon si ca existait quelqu'un le saurait surement  
 
tant pis je ferai autrement...

n°633888
blackgodde​ss
vive le troll !
Posté le 06-02-2004 à 20:50:15  profilanswer
 

bin ma méthode elle marche bien :o
représentation locale = interface (oui j'entends par la une classe et des méthodes virtuelles pures, et deux fonctions C)
 
au fait, petite question sur le sujet : le programme et le .so partagent les mêmes allocateurs ? (le même tas, etc ...)


---------------
-( BlackGoddess )-
n°634284
ganjo
Posté le 07-02-2004 à 01:53:51  profilanswer
 

http://www.isotton.com/howtos/C++- [...] ingclasses
http://www.linuxjournal.com/article.php?sid=3687
 
la methode est simple, passé par une fonction C (dans un exterc C) qui renvoi un pointeur sur l'objet, je trouve pas ça tres propre, mais cest a prioris la seule solution, et ca marche bien. Il y avait un autre topic sur le sujet, et cest la seule solution qui ait été trouvé

n°634309
blackgodde​ss
vive le troll !
Posté le 07-02-2004 à 02:53:51  profilanswer
 

bin c ce que je viens de dire lol :p


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 07-02-2004 à 02:53:51  profilanswer
 

n°635611
SoWhatIn22
Posté le 09-02-2004 à 08:06:07  profilanswer
 

BlackGoddess a écrit :

au fait, petite question sur le sujet : le programme et le .so partagent les mêmes allocateurs ? (le même tas, etc ...)


il me semblait que ce pb n'existe que sous windows, selon la CRT qui est utilisée. Le pb se pose aussi sous unix?

n°635689
blackgodde​ss
vive le troll !
Posté le 09-02-2004 à 10:23:18  profilanswer
 

sinon, une autre petite question : les exceptions remontent jusqu'au programme qui appelle une fonction de la dll ? ou ca plante s'il n'y a pas de catch dans la dll ?


---------------
-( BlackGoddess )-
n°635706
SoWhatIn22
Posté le 09-02-2004 à 10:47:32  profilanswer
 

blackgoddess a écrit :

sinon, une autre petite question : les exceptions remontent jusqu'au programme qui appelle une fonction de la dll ? ou ca plante s'il n'y a pas de catch dans la dll ?


tu peux lever une exception dans un module et l'attraper dans un autre. Donc la réponse est: oui.
Sous linux/unix, il faut bien faire attention de faire l'édition de lien et la création de la bibliothèque avec g++ et non pas ld, sans quoi l'exception risque bien de ne pas être attrapée. C'est sans doute une question d'option à passer à ld, mais je n'ai jamais su de laquelle il s'agit!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Appler une méthode C++ dans un shared object

 

Sujets relatifs
[Vba] question sur la methode add dans la collection workbookBusiness object
[SOLUCE]access.combobox.addite m ---> methode inconnue sous access2000[PHP]probleme pour recuperee une donnee passee en methode GET ou POST
envoi de donnée en methode post par un hearder...univers Bussiness object
Veut pas virer un cookie malgré méthode fonctionnant pour un autre[XML DOM] Javascript et la méthode save()
[VB] - methode popupmenu -> appli qui se ferme pas. PQ?j# - Winsock Bordel j'arrive pas à utiliser la méthode connect :(
Plus de sujets relatifs à : Appler une méthode C++ dans un shared object


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR