Erstellen einer MSVC-Importbibliothek aus einer DLL, die stdcall verwendet

Ich habe eine DLL, die exportiert

extern "C" __declspec(dllexport) int __stdcall Foo( void );

Ein Dump der DLL zeigt

******************************************************************************
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

******************************************************************************

Ich habe mit der folgenden def-Datei begonnen:

LIBRARY simple.dll 
EXPORTS
  Foo

Dadurch wurde eine lib-Datei mit den folgenden Exporten erstellt:

Exports
       ordinal    name
                  _Foo

Wenn ich mit dieser Bibliothek verlinke, beschwert sich der msvc-Linker, dass er _Foo @ 0 nicht finden kann. Um dieses Problem zu beheben, habe ich der def-Datei einen Alias hinzugefügt.

LIBRARY simple.dll 
EXPORTS
  Foo
  Foo@0=Foo

Was zu einer lib-Datei mit Exporten führt

Exports
       ordinal    name
                  _Foo
                  _Foo@0

Jetzt ist das Projekt ohne Probleme verlinkt. Wenn ich jedoch versuche, es auszuführen, erhalte ich die Nachricht

"Der Prozedur-Einstiegspunkt Foo @ 0 konnte nicht in der Dynamic Link Library simple.dll gefunden werden."

Obwohl ich lib.exe mitgeteilt habe, dass Foo @ 0 ein Alias für Foo ist, wird dennoch eine Importbibliothek erstellt, die versucht, "Foo @ 0" nach Namen zu laden.

Gibt es eine Möglichkeit, die Importbibliothek zum Laden von "Foo" zu bewegen, wenn ich nach "Foo @ 0" gefragt habe?

Vielen Dank,

David

Antworten auf die Frage(1)

Ihre Antwort auf die Frage