2016-05-06 3 views
-2

Ich schreibe eine DLL in Delphi XE8, um von einer in Delphi XE8 geschriebenen App verwendet zu werden.Delphi DLL Case Sensitivity

Meine DLL sieht so aus.

function GetInt : Integer; stdcall; 
    begin 
    Result := 300; 
    end; 
    exports GetInt; 

Meine App sieht so aus.

dllHandle := LoadLibrary(PChar('myDLL.dll')); 
    ShowMessage(SysErrorMessage(GetLastError)); 
    if dllHandle <> 0 then 
    begin 
    @GetInt := GetProcAddress(dllHandle, 'GetInt'); 
    ShowMessage(SysErrorMessage(GetLastError)); 
    if Assigned(GetInt) then 
     ShowMessage(IntToStr(GetInt)) 
    else 
     ShowMessage('Nope'); 
    end; 

Ich bekomme einen Fehler "spezifizierte Prozedur konnte nicht gefunden werden". Also ändere ich meine exports-Anweisung und meine @GetInt-Anweisung von "G etInt" nach "g etInt". Jetzt ist alles in Ordnung.

So jetzt meine Frage: Warum muss meine DLL-Funktion und Export das gleiche Wort mit unterschiedlicher Groß-/Kleinschreibung sein?

+2

'GetProcAddress' ** ist ** in der Tat Groß-und Kleinschreibung. Ihr Code sieht korrekt aus. Ich schlage vor, Sie untersuchen Export-Verzeichnis des Bildes (mit z. B. "tdump") –

+0

Kann nicht mit dem vorgestellten Code reproduzieren. –

+0

Das ist nie ein gutes Zeichen. – Paul

Antwort

2

Bei Windows-DLL-exportierten Symbolnamen wird zwischen Groß- und Kleinschreibung unterschieden. Ihr bereitgestellter Code verhält sich nicht wie beschrieben. Ihr tatsächlicher Code hat einen falschen Brieffall.

Fast sicher laden Sie eine veraltete DLL.

+0

Rechts. Wenn meine Bibliothek die Funktion hat und die passenden Exports meiner App die Funktion nicht bekommen. Wenn ich absichtlich die Fallkonflikt hinzufügen, lädt meine App die Funktion (ich ändere die App, um die Dll-Exporte-Anweisung widerzuspiegeln) – Paul

+0

Das ist nicht wahr. Was Sie melden, ist falsch. Sie laden eine veraltete DLL, denke ich. –

+0

DANKE! Genau das passierte. – Paul