Domanda

ho una dll, esporta una funzione ...

extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}

compilo questo con Code :: Blocks compilatore GCC (V3.4.5). Problema: dll con conseguente esportazioni decorato nome della funzione ...

MP_GetFactory@4

Questo non riesce a caricare, dovrebbe essere semplice vecchia ...

MP_GetFactory

Ho ricercato questo per circa 4 ore. Penso --add-stdcall-alias è la possibilità di risolvere il problema. Il mio codice :: Accedi Blocks spettacoli ...

  

mingw32-g ++ exe -shared -Wl, -. Out-IMPLIB = bin \ Debug \ libGainGCC.a -Wl, - dll obj \ Debug \ se_sdk3 \ mp_sdk_audio.o obj \ Debug \ se_sdk3 \ mp_sdk_common.o obj \ Debug \ guadagno \ Gain.o obj \ Debug \ guadagno \ gain.res -o bin \ Debug \ GainGCC.sem --add-stdcall-alias -luser32

.. quindi penso che sia l'opzione corretta in là? Ma senza fortuna. Dipendenza Walker mostrano solo il nome decorato da esportare. Ho preso a lavorare un pò utilizzando __cdecl invece di __stdcall, il nome viene poi esportato ok, ma la funzione corrompe lo stack quando viene chiamato (perché il chiamante attende l'altra convenzione di chiamata).

È stato utile?

Soluzione

Mi dispiace di rispondere alla mia domanda, finalmente capito.

Progetto / costruzione / Opzioni del linker / Altre opzioni linker -Wl, - kill-a

... uccide la decorazione simbolo '@', ecc.

Altri suggerimenti

Credo che dovrebbe essere -Wl, - add-stdcall-alias e il "kill-a" trucchi faranno il file di libreria di importazione generato non utilizzabile

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