我有一个dll,它导出一个函数...

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

我使用Code :: Blocks GCC编译器(v3.4.5)对此进行编译。问题:生成的DLL导出装饰功能名称...

MP_GetFactory@4

这无法加载,应该是普通的...

MP_GetFactory

我已经研究了大约4个小时。我认为-ADD-STDCALL-ALIAS是解决此问题的选项。我的代码:: blocks log显示...

mingw32-g ++。exe -shared -wl, - out-implib = bin debug libgaingcc.a -wl, - dll obj debug se_sdk3 mp_sdk_sdk_audio.o obj obj debug se_sdk3 se_sdk3 mp_sdk_sdk_common.o objcommo obj obj obj o obj o obj o obj o obj o obj o obj o obj o obj o obj.o gain gain.o obj debug gain gain.res -o bin debug debug gaingcc.sem -add -stdcall -alias -luser32

..所以我认为那是正确的选择吗?但是没有运气。依赖性沃克仅显示出口装饰的名称。我通过使用__cdecl而不是__ stdcall来使它有点工作,然后将名称导出可以,但是该函数在调用时会损坏堆栈(因为呼叫者期望其他调用约定)。

有帮助吗?

解决方案

很抱歉回答我自己的问题,终于弄清楚了。

项目/构建选项/链接器/其他链接器选项-WL, - Kill-at

...杀死装饰'@'符号等

其他提示

我认为应该是-wl, - 添加stdcall-alias,“ kill-at”技巧将使生成的导入库文件不可用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top