windows - hvorfor ekstern 'C' stadig ikke kan fjerne navngivning i følgende tilfælde

Indlæg af Hanne Mølgaard Plasc

Problem



extern "C"
{
\_\_declspec(dllexport) LRESULT CALLBACK MTest
}


Ved hjælp af afhængig fandt jeg, at der stadig mangler navn, selv ved brug af extern "C".

Bedste reference


Den eneste måde at få virkelig ukorrekte navne på med \_\_declspec (dllexport) er at eksportere dem med \_\_cdecl calling conventionen. CALLBACK bliver \_\_stdcall, som dekorerer navnet 'C' med en førende \_ og efterfølgende @bytes.


Ellers kan du bruge en .DEF-fil, hvilket er en smerte. En anden MSVC-specifik måde er at indlejre et/EXPORT-direktiv i objektfilen (eller send det som en eksplicit linkerindstilling) [5]


#pragma comment(linker, "/EXPORT:ExportSymbol=DecoratedName");


Af en eller anden grund er = delen af ​​direktivet ikke angivet i hjælpen

Andre referencer 1


Det er navnets dekoration snarere end mangling. Du skal erklære det ukorrekte navn i en DEF-fil, og så får du den adfærd, du søger.

Andre referencer 2


Ikke at være meget af en visuel C ++-programmør den første tanke, der forekommer mig, er ... 'indfører nogen af ​​disse makroer LRESULT eller CALLBACK standardkaldkonventionen?' Har de manglede navne @NUMBER\_OF\_BYTES\_OF\_PARAMATER\_LIST eller tegn, der viser de faktiske typer, der er tilføjet dem?