vinduer - \_\_stdcall uden nogen dekoration

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en .dll Jeg har mistanke om brug af \_\_stdcall funktioner, men helt undecorated navne (ikke engang understregning eller @ tegn). Jeg skrev en .def fil for det med aliaser som


func1 = func1
func1@4 = func1


men jeg tror lib (som jeg bruger til at oprette importbiblioteket fra .def filen ignorerer aliaserne (linkeren siger stadig func1@4 er udefineret)


Hvordan kan jeg oprette et importbibliotek, der vil kortlægge func1@4 til func1?

Bedste reference


Jeg ved ikke, om det er muligt at oprette den rigtige .lib fil med lib.exe, så jeg foreslår at oprette en DLL med stubs af funktioner, der eksporteres af original DLL.


Eksempel dll.cpp fil:


void \_\_stdcall foo(int) {}


dll.def fil:


EXPORTS
foo=foo


Så kompilerer du det, fra IDE eller kommandolinje:


cl dll.cpp /link /dll /def:dll.def /noentry


Det vil oprette korrekt dll.lib fil, så du kan bruge den med kode som denne:


void \_\_stdcall foo(int);
#pragma comment(lib, "dll")
int main()
{
    foo(42);
}

Andre referencer 1


Du bør væreklærer funktionens prototype som ekstern 'C' som du selvfølgelig compilerer med i C ++-tilstand:


extern "C" void func1(void); // correct prototype, add \_\_stdcall if necessary?


Du kan indpakke hele sektioner af en headerfil indeni


extern "C" {
    // ... C compatible declarations
}