Einzelnen Beitrag anzeigen

dingdoi

Registriert seit: 3. Aug 2004
Ort: Hamburg
26 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit dynamischem Laden von DLL mit Aufrufkonvention cdecl

  Alt 22. Nov 2012, 11:19
Hallo zusammen,

mir wurde eine C-DLL zur Verfügung gestellt, die ich in meine Delphi-Anwendung einbinden muss. Ich habe es im ersten Schritt dynamisch versucht:

Delphi-Quellcode:
// Deklarationen
TpdfGetNumPages = function (pdf: Pointer): Integer; cdecl;

pdfGetNumPages: TpdfGetNumPages;

// Hilfsfunktion
procedure LoadFunction(var Func: Pointer; const FuncName: AnsiString);
begin
   if Func = nil then begin
      Func := GetProcAddress(FDLL_Handle, PAnsiChar(FuncName));
      if Func = nil then raise Exception.Create(Format('Error loading function: "%s"', [FuncName]));
   end;
end;

// Aufruf
LoadFunction(@pdfGetNumPages, 'pdfGetNumPages');
Result := pdfGetNumPages(pdf);
Anstatt der korrekten Seitenzahl 1 erhalte ich jedoch den Rückgabewert -899131968.

Nun das spannende: Wenn ich das Ganze statisch mache, funktioniert es!

Delphi-Quellcode:
function pdfGetNumPages(pdf: Pointer): Integer; cdecl;

function pdfGetNumPages; external 'DllName.dll';
Woran kann das liegen? Gibt es noch eine spezielle Variante von GetProcAdress für cdecl-Dlls?

Grüße,
Jan
  Mit Zitat antworten Zitat