GCC compilando una dll con __stdcall
-
01-07-2019 - |
Domanda
Quando compiliamo una dll usando __stdcall in Visual Studio 2008, i nomi delle funzioni compilate all'interno della dll sono.
FunctionName
Anche se quando compiliamo la stessa dll usando GCC usando wx-dev-cpp GCC accoda il numero di parametri che ha la funzione, quindi il nome della funzione usando Dipendenza Walker appare come.
FunctionName @ numberOfParameters o == FunctionName @ 8
Come si dice al compilatore GCC di rimuovere @nn dai simboli esportati nella dll?
Soluzione
__stdcall decora il nome della funzione aggiungendo un carattere di sottolineatura all'inizio e il numero di byte di parametri alla fine (separati da @).
Quindi, una funzione:
void __stdcall Foo(int a, int b);
... diventerebbe _Foo @ 8.
Se si elenca il nome della funzione (non decorato) nella sezione EXPORTS del file .DEF, viene esportato non decorato.
Forse questa è la differenza?
Altri suggerimenti
Usa -Wl, - kill-at
sulla riga di comando di gcc, che passerà --kill-at
al linker.
References:
Puoi anche usare -Wl, - add-stdcall-alias
per le opzioni del tuo linker in GCC. Ciò assicurerà che entrambi i nomi delle funzioni (decorati e non decorati) siano presenti e possano essere usati come alias.