GCC compilar um DLL com __stdcall
-
01-07-2019 - |
Pergunta
Quando compilar uma dll usando __stdcall dentro visual studio 2008 os nomes das funções compiladas dentro da dll são.
FunctionName
Embora quando compilar o mesmo dll usando GCC usando wx-dev-CPP GCC acrescenta o número de parâmeros a função tem, por isso, o nome da função usando Dependency Walker aparência semelhante.
FunctionName @ numberOfParameters ou == FunctionName @ 8
Como você diz compilador GCC para remover @nn de símbolos exportados sob a dll?
Solução
__ stdcall decora o nome da função através da adição de um sublinhado para o início, e o número de bytes de parâmetros para a extremidade (separados por @).
Assim, uma função:
void __stdcall Foo(int a, int b);
... se tornaria _foo @ 8.
Se você listar o nome da função (sem decoração) na seção EXPORTS do seu arquivo .def, ela é exportada undecorated.
Talvez esta é a diferença?
Outras dicas
Apenas uso -Wl,--kill-at
na linha de comando gcc, que passará --kill-at
para o vinculador.
Referências:
Você também pode usar -Wl,--add-stdcall-alias
às suas opções vinculador em GCC. Isto irá assegurar que ambos os nomes de função (decorados e undecorated) estão presentes e podem ser usados ??como alias.