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++

Vue hybride

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

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    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
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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
    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 ?

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

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    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 confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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.

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

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    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

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