J'essaie de créer une DLL qui exporte une fonction appelée "GetName". J'aimerais que d'autres codes puissent appeler cette fonction sans avoir à connaître le nom de la fonction mutilée.Comment arrêter la gestion des noms de la fonction exportée de ma DLL?
Mon fichier d'en-tête ressemble à ceci:
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT TCHAR * CALLBACK GetName();
Mon code ressemble à ceci:
#include <windows.h>
#include "PluginOne.h"
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}
EXPORT TCHAR * CALLBACK GetName()
{
return TEXT("Test Name");
}
Lorsque je construis, la DLL exporte toujours la fonction avec le nom: "_GetName @ 0" .
Qu'est-ce que je fais mal?
Hey cool C'est exactement ce que je dois presque. Maintenant, que faire si je le veux dans l'autre sens? J'ai la fonction C, tout à fait bien être la fonction de membre C++ (vtable, convention d'appel tout fait), mais le compilateur chiffre son nom devrait être mutilé. – Pyjong
Oui, C et C++ utilisent différentes règles de décoration de noms. Pour faire ce que vous demandez à propos de vous devez créer un wrapper qui appellera la fonction C du membre de la classe C++ – Dewfy
Un fichier .DEF est le seul moyen de désactiver la gestion des noms. 'extern 'C" 'utilisera toujours la décoration de nom, mais pas aussi verbeux que le C++. – IInspectable