So, ich bin zurück vom probieren. xD
Ich habe 2 Varianten ausprobiert. zum einen die statische und zum anderen die dynamische, wobei ich mich an dieses (
http://michael-puff.de/Programmierun...l_tutorial.pdf) Tutorial gehalten habe.
Allerdings funst es immernoch nicht.
Hier der Code der dynamischen Version:
Delphi-Quellcode:
unit Scanner_DLLDynImport;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs;
const
//DLL´s
ct_nativeDLL = '
98x_API.dll';
//Methoden der DLL´s
ct_Init = '
Scanner98x_Init';
{$T+}
type
//DLL Methoden
TFNInit =
function (Attempts, Timeout: DWORD; Error: LPDWORD): Boolean;
cdecl;
var
Scanner98x_Init: TFNInit =
nil;
type
TDialog_Scannen =
class(TForm)
procedure FormCreate(Sender: TObject);
function GetEntryPoints(): Boolean;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Dialog_Scannen: TDialog_Scannen;
implementation
{$R *.dfm}
procedure TDialog_Scannen.FormCreate(Sender: TObject);
begin
try
if GetEntryPoints()
then
Scanner98x_Init(1, 1000,
nil);
except
on e:
Exception do
ShowMessage('
Fehler in FormCreate(): ' + e.
Message);
end;
end;
function TDialog_Scannen.GetEntryPoints(): Boolean;
var
lib: THandle;
begin
Result := True;
try
lib := LoadLibrary(ct_nativeDLL);
case lib = 0
of
True:
begin
@Scanner98x_Init :=
nil;
ShowMessage('
FEHLER: DLL konnten nicht geladen werden!');
Result := False;
end;
else
begin
@Scanner98x_Init := GetProcAddress(lib, ct_Init);
if not Assigned(Scanner98x_Init)
then
begin
ShowMessage('
FEHLER: Eintrittspunkt von Scanner98x_Init() nicht gefunden!');
Result := False;
end;
end;
end;
except
on e:
Exception do
ShowMessage('
Fehler in GetEntryPoints(): ' + e.
Message);
end;
end;
Die Fehlermeldung, die ich hier beim compilieren bekomme ist im Anhang (dllfehler1).
Und hier mein code für das statische einfügen der
dll:
Delphi-Quellcode:
unit D_Scannen;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
Vcl.ExtCtrls;
const
//DLL´s
ct_nativeDLL = '
98x_API.dll';
type
TDialog_Scannen =
class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Dialog_Scannen: TDialog_Scannen;
//DLL Methoden
function Init(Attempts, Timeout: DWORD; Error: LPDWORD): Boolean;
cdecl;
external ct_nativeDLL
name '
Scanner98x_Init';
implementation
{$R *.dfm}
procedure TDialog_Scannen.FormCreate(Sender: TObject);
begin
try
Init(1, 1000,
nil);
except
on e:
Exception do
begin
ShowMessage('
Fehler in FormCreate(): ' + e.
Message);
end;
end;
end;
end.
Die Fehlermeldung hierfür ist auch im Anhang (dllfehler2).
Die "98x_API.dll" ist jeweils im selben Ordner, wie die .exe, also was mach ich falsch?
Sieht jemand irgendwelche groben Fehler? (Ich habe vorher noch nie mit Pointern gearbeitet
)