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?
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?
[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.
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
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
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.
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager