Hallo,
danke für dein Beispiel. So habe ich es im großen und Ganzen auch.
Die Unterscheidung
{$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
scheint nützlich zu sein. Ich schaue mir das mal genauer an.
Allerdings sind bei dir die Funktionsköpfe auch redundant. Ich würde die am liebsten nach C-Manier in die "MyAPI_H" Datei pflanzen (mit einer Art
Unit-Übergreifenden "forward"), aber dann möchte Delphi, dass ich sie auch gleich definiere.
API Benutzung
Delphi-Quellcode:
unit MyAPI;
interface
uses
MyAPI_H;
{$EXTERNALSYM function_1}
{$EXTERNALSYM function_2}
...
{$EXTERNALSYM function_n}
// Redundante Information: Funktionsköpfe
// Nach C-Manier gehören die in die "H"-Datei
procedure function_1(args: cardinal);
stdcall;
procedure function_2(args: cardinal);
stdcall;
...
procedure function_n(args: cardinal);
stdcall;
implementation
procedure function_1;
external '
mydll.dll'
name '
function_1';
procedure function_2;
external '
mydll.dll'
name '
function_2';
...
procedure function_n;
external '
mydll.dll'
name '
function_n';
end.
API Entwicklung
Delphi-Quellcode:
unit MyAPI_Impl;
interface
uses
MyAPI_H;
// Redundante Information: Funktionsköpfe
// Nach C-Manier gehören die in die "H"-Datei
procedure function_1(args: cardinal);
stdcall;
procedure function_2(args: cardinal);
stdcall;
...
procedure function_n(args: cardinal);
stdcall;
implementation
// Implementierung
end.
Ich denke, dafür bietet die Pascal-Strukturierung keine Lösung (mit Ausnahme einer *.inc, was ich nicht so toll finde wegen fehlendem Syntax-Highlighting)
Gruß
Daniel