2010-03-24 2 views
4

에서 나는 코드 :: 블록 GCC 컴파일러 (V3.4.5)와 함께이 컴파일GCC 수출은 전용 DLL

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

... dll을, 그것은 기능을 수출하고 있습니다. 문제 : 함수 이름 장식 결과 DLL을 수출 ...이로드되지

[email protected] 

MP_GetFactory 

나는 약 4 시간 동안이 문제를 연구했습니다 ... 오래된 일반해야한다. 내 생각에 --add-stdcall-alias가 이것을 고치는 옵션이다. 내 코드 :: 블록이 쇼를 기록 ...

mingw32-g ++ EXE -shared -Wl, -. 아웃 IMPLIB = 디버그 \ libGainGCC.a -Wl \ 빈 - DLL OBJ \ 디버그 \ se_sdk3 \ mp_sdk_audio.o obj \ Debug \ se_sdk3 \ mp_sdk_common.o obj \ Debug \ Gain \ Gain.o obj \ Debug \ Gain \ gain.res -o bin \ Debug \ GainGCC.sem --add-stdcall-alias -luser32

.. 그게 올바른 옵션이라고 생각합니다. 그러나 운이 없다. Dependancy Walker는 내 보낸 장식 된 이름 만 표시합니다. __stdcall 대신 __cdecl을 사용하여 일을 처리하고 이름을 내 보낸 다음 함수를 호출하면 호출이 스택을 손상시킵니다 (호출자가 다른 호출 규칙을 예상했기 때문에).

답변

5

내 자신의 질문에 대답 해 주셔서 죄송합니다. 마침내 알아 냈습니다.

프로젝트/옵션/링커/기타 링커 옵션 -Wl 빌드 - 죽일-에서

... 장식을 죽인다 '@'등의 기호 나는 그것이 -Wl해야한다고 생각

1

을 , - add-stdcall-alias와 "kill-at"트릭을 사용하면 생성 된 가져 오기 라이브러리 파일을 사용할 수 없게됩니다.