DLL C++ à l'Exportation: Décoré/noms Déformés

Créé de base de C++ DLL et exporté à l'aide de noms de fichier de Définition de Module (Madll.def).
Après la compilation j'ai vérifier les noms des fonctions exportées à l'aide de dumpbin.exe
Je m'attends à voir:

SomeFunction

mais je vois ceci à la place:

SomeFunction = SomeFunction@@@23mangledstuff#@@@@

Pourquoi?

La fonction exportée apparaît sans décor (surtout par rapport à la non-utilisation du Module fichier Def), mais qu'est-ce autre chose?

Si j'utilise dumpbin.exe contre une DLL à partir de toute application commerciale, vous obtenez le nettoyer:

SomeFunction

et rien d'autre...

J'ai aussi essayé de supprimer la Définition de Module et de l'exportation des noms à l'aide de la "C" style de l'exportation, à savoir:

extern "C" void __declspec(dllexport) SomeFunction();

(Simplement à l'aide de "extern "C" ne pas créer une fonction exportée)

Cependant, cela crée toujours le même résultat, à savoir:

SomeFunction = SomeFunction@@@23mangledstuff#@@@@

J'ai aussi essayé la #define dllexport __declspec(dllexport) option et créé une LIB avec aucun problème. Cependant, je ne veux pas avoir à fournir un fichier LIB pour les personnes à l'aide de la DLL dans leur application en C#.

C'est une plaine de vanille DLL C++ (code non managé), compilé en C++ rien, mais un simple en-tête et le code. Sans Module Def-je obtenir de déformation des fonctions exportées (je peux créer une bibliothèque statique et l'utilisation de la LIB aucun problème. J'essaie d'éviter). Si j'utilise extern "C" __declspec(dllexport) OU une Définition de Module-je obtenir ce qui semble être un non nom de la fonction... le seul problème, c'est qu'il est suivi par un "=" et ce qui ressemble à un décoré de la version de la fonction. Je veux me débarrasser de la substance après le "=" - ou au moins de comprendre pourquoi il est là.

Comme il est, je suis à peu près certain que je peux appeler la fonction à partir de C# à l'aide d'un P/Invoke... je veux juste éviter de bric-à-brac à la fin du "=".

Je suis ouvert aux suggestions sur la façon de modifier le projet/les paramètres du compilateur, mais j'ai juste utilisé le standard de Visual Studio DLL modèle - rien de spécial.

  • L'ensemble de point de extern "C" est à undecorate fonctions c++. Si ca ne fonctionne pas, vous devez vous assurer que vous êtes en train de construire votre DLL correctement.
  • Hans donné la bonne réponse ci-dessous.......
  • Je veux juste éviter de bric-à-brac à la fin du "=". Cette ordure ne fait pas de mal. Il est là, mais il ne change pas le binaire de l'interface de votre module.
InformationsquelleAutor Bob | 2010-05-10