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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top