Criando uma biblioteca de importação MSVC a partir de uma DLL que usa stdcall
Eu tenho uma DLL que exporta
extern "C" __declspec(dllexport) int __stdcall Foo( void );
Um despejo da dll mostra
******************************************************************************
Section: Exports
File Offset: 00001400 (5120)
Flags: 00000000
Time Stamp: 00000000
Major Version: 0000
Minor Version: 0000
Exports from simple.dll
3 exported name(s), 3 export addresse(s). Ordinal base is 1.
Sorted by Name:
RVA Ord. Hint Name
-------- ---- ---- ----
00002104 3 0000 std::nothrow
00001258 2 0001 Foo
000020F8 1 0002 ___CPPdebugHook
******************************************************************************
Comecei com o seguinte arquivo def:
LIBRARY simple.dll
EXPORTS
Foo
Isso criou um arquivo lib com as seguintes exportações:
Exports
ordinal name
_Foo
Quando vinculo a esta biblioteca, o vinculador msvc reclama que não consegue encontrar _Foo @ 0. Para corrigir esse problema, adicionei um alias ao arquivo def.
LIBRARY simple.dll
EXPORTS
Foo
Foo@0=Foo
O que resulta em um arquivo lib com exportações
Exports
ordinal name
_Foo
_Foo@0
Agora o projeto é vinculado sem nenhum problema. No entanto, quando tento executá-lo, recebo a mensagem
"O ponto de entrada do procedimento Foo @ 0 não pôde ser localizado na biblioteca de vínculo dinâmico simple.dll"
Portanto, embora eu tenha dito ao lib.exe que o Foo @ 0 é um alias para o Foo, ele ainda cria uma biblioteca de importação que tenta carregar "Foo @ 0" pelo nome.
Existe uma maneira de obter a biblioteca de importação para carregar "Foo" quando solicitei "Foo @ 0"?
Obrigado,
David