-- DLL notes 3 of <Windows via C/C++>
Normally, C++ compilers mangle function and variable names. And there are some ways to change the way compilers mangling:
extern "C"
Using extern "C" tells the compiler not to mangle the variable or function names.
__stdcall
Microsoft's C compiler mangles C functions even if you're not using C++ at all. When C functions are exported using __stdcall, Microsoft's compiler mangles the function names by prepending a leading underscore and adding a suffix of an @ sign followed by a number that indicates the count of bytes that are passed to the function as parameters. For example, this function is exported as _MyFunc@8 in the DLL's export section.
__declspec(dllexport) LONG __stdcall MyFunc(int a, int b);
Here is an example:
#define MYLIBAPI __declspec(dllexport)
MYLIBAPI int add(int, int);
MYLIBAPI int add(int, int, int);
MYLIBAPI int __stdcall addstd(int, int);
extern "C" MYLIBAPI int addextern(int, int);
extern "C" MYLIBAPI int __stdcall addexternStd(int, int);
And those are the mangled function name:
?add@@YAHHH@Z
?add@@YAHHHH@Z
?addstd@@YGHHH@Z
addextern
_addexternStd@8