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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top