IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Nom d' une class dans une dll compilée avec mingw32


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Nom d' une class dans une dll compilée avec mingw32
    Bonjour
    je cherche à créer une dll contenant une classe. Malheureusement les noms référencé dans la dll sont de type _zntoto
    je voudrais avoir un naming type toto::toto(void)
    comment faire?

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Landru Voir le message
    Bonjour
    je cherche à créer une dll contenant une classe. Malheureusement les noms référencé dans la dll sont de type _zntoto
    je voudrais avoir un naming type toto::toto(void)
    comment faire?
    Si tu veux charger une par une les fonctions membres de toto pour recréer une pseudo-classe toto, bon courage, parce que ça ne va pas être simple

    Qu'est-ce que tu veux faire exactement ?
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Les DLL ne peuvent contenir que du code "C", elles n'ont pas de notion d'objet, cette notion est gérée par le compilateur uniquement, au moment de créer la DLL.

    A moins que ton besoin soit un peu différent. Où est ce que tu bloques exactement ?
    Find me on github

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Si tu veux charger une par une les fonctions membres de toto pour recréer une pseudo-classe toto, bon courage, parce que ça ne va pas être simple

    Qu'est-ce que tu veux faire exactement ?
    je voudrais une dll contenant les membres suivants:
    public __thiscall toto::toto(void)
    public __thiscall toto::~toto(void)
    public int __thiscall toto::mamethode(void)

    lorsque je compile ma class toto et que j'inspecte la dll générée, j'ai
    _ZN15totoC1Ev
    ...

    C'est donc un problème de nommage dans la dll

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Les noms tels que vus par les editeurs de liens sont contraints et ne peuvent pas contenir n'importe quel caractere. Pour cette raison -- et d'autres aussi -- les compilateurs encodent le nom ainsi que les caracteristiques permettant de le rendre unique (namespace englobant, classe, prototype, etc, je doute que la visibilite en fasse partie) en n'utilisant que des caracteres autorises par l'editeur de liens, processus appele en francais decoration des noms et bien plus connu sous le nom anglais de name mangling.

    _ZN15totoC1Ev encode vraisemblablement toto::toto(void)

    La decoration des noms fait partie de l'ABI, chose plus large comprenant aussi la maniere dont les exceptions sont generees, l'alignement a utilise pour les types, la maniere dont on retrouve les fonctions virtuelles, etc. C'est expres que des ABI differentes utilisent des decorations de noms differentes, ca permet de detecter des l'edition de liens une incompatibilite qui autrement pourrait n'etre visible que par des problemes d'execution plus ou moins subtils.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Ca risque d'être compliqué. Alors.
    En fait je voudrais remplacer une dll existante par mon propre code.
    Et évidemment je voudrais que le programme hôte retrouve tous ses petits
    Y a t il une autre solution pour y arriver? Sachant que je nvai pas le code source du programme hôte

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Et comment tu fais si il y avait des fonctions inlinees? Ca necessite de savoir beaucoup sur la DLL. Reussir a faire des composants interchangables demande en general de concevoir le composant pour ca, en documentant... l'ABI du composant. Si ca n'a pas ete fait, c'est dur, et encore plus si tu n'as pas les sources.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. [C#]Accéder à une methode dans une classe d'une DLL externe
    Par Greg34000 dans le forum Services Web
    Réponses: 3
    Dernier message: 28/03/2013, 15h54
  2. [Débutant] Référence au nom d'une classe dans une classe
    Par Dedechseb dans le forum VB.NET
    Réponses: 9
    Dernier message: 03/08/2012, 15h42
  3. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  4. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  5. Une classe dans une classe...
    Par Baquardie dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2005, 19h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo