Crear una biblioteca de importación MSVC a partir de una DLL que usa stdcall
Tengo un dll que exporta
extern "C" __declspec(dllexport) int __stdcall Foo( void );
Un volcado de la dll muestra
******************************************************************************
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
******************************************************************************
Comencé con el siguiente archivo def:
LIBRARY simple.dll
EXPORTS
Foo
Esto creó un archivo lib con las siguientes exportaciones:
Exports
ordinal name
_Foo
Cuando enlazo con esta biblioteca, el enlazador msvc se queja de que no puede encontrar _Foo @ 0. Para corregir este problema, agregué un alias al archivo def.
LIBRARY simple.dll
EXPORTS
Foo
Foo@0=Foo
Lo que da como resultado un archivo lib con exportaciones
Exports
ordinal name
_Foo
_Foo@0
Ahora el proyecto se vincula sin ningún problema. Sin embargo, cuando intento ejecutarlo, recibo el mensaje
"El punto de entrada del procedimiento Foo @ 0 no se pudo ubicar en la biblioteca de enlaces dinámicos simple.dll"
Entonces parece que aunque le dije a lib.exe que Foo @ 0 es un alias para Foo, todavía crea una biblioteca de importación que intenta cargar "Foo @ 0" por su nombre.
¿Hay alguna manera de hacer que la biblioteca de importación cargue "Foo" cuando solicité "Foo @ 0"?
Gracias,
David