c++cexternname-mangling

How do I stop name-mangling of my DLL's exported function?


I'm trying to create a DLL that exports a function called "GetName". I'd like other code to be able to call this function without having to know the mangled function name.

My header file looks like this:

#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif

EXPORT TCHAR * CALLBACK GetName();

My code looks like this:

#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");
}

When I build, the DLL still exports the function with the name: "_GetName@0".

What am I doing wrong?


Solution

  • Small correction - for success resolving name by clinet

    extern "C"
    

    must be as on export side as on import.

    extern "C" will reduce name of proc to: "_GetName".

    More over you can force any name with help of section EXPORTS in .def file