Perché esterno "C" non può ancora rimuovere il manglinire nel caso seguente
-
12-11-2019 - |
Domanda
extern "C"
{
__declspec(dllexport) LRESULT CALLBACK MTest
}
Usando dipende, ho scoperto che c'è ancora il nome di manglini anche usando extern "C"
.
Soluzione
L'unico modo per ottenere nomi veramente non decorati con __declspec (dllexport) è esportarli con la convenzione __CDecl Calling. Il callback diventa __stdcall, che decora la forma "C" del nome con un _ e un trailing @Bytes.
Altrimenti è possibile utilizzare un file .def, che è un dolore. Un altro modo specifico per MSVC è incorporare a /ESPORTARE Direttiva nel file dell'oggetto (o passarlo come un'impostazione di linker esplicita)
#pragma comment(linker, "/EXPORT:ExportSymbol=DecoratedName");
Per qualche motivo il =
Parte della direttiva non è elencata nell'aiuto
Altri suggerimenti
Questo è la decorazione del nome piuttosto che il masgre. Dovresti dichiarare il nome non decorato in un file def e poi otterrai il comportamento che stai cercando.
Non essendo molto un programmatore di C ++ visivo il primo pensiero che mi accade è ... "Qualcuno di quei macro Lresult o callback introducono la convenzione di chiamata standard?" I nomi mutilati hanno @number_of_bytes_of_paramater_list o caratteri che raffigurano i tipi effettivi aggiunti ad essi?