die Frage, wie man DLLs einbindet, wird in verschiedenen Tutorien behandelt.
z.B. http://wiki.lazarus.freepascal.org/Laza ... ic_library" onclick="window.open(this.href);return false;
Doch fehlen mir da irgendwelche Informationen weil damit einfach nicht zum Ziel komme.
Ich hatte gehofft, dass das eigentlich eine FAQ ist und entsprechend ausführlich für Neueinsteiger erklärt wird.
(Win7 32bit, Lazarus 0.9.30.4)
Die Informationen, die ich von der DLL habe sind folgende:
CUSBaccess *FCWInitObject() ;
Initialisiert den funktionalen Zugriff auf die API-Funktionen.
int OpenDevice() ;
int FCWOpenDevice(CUSBaccess *obj) ;
Sucht die angeschlossenen USB-Geräte und öffnet diese. Die Anzahl der gefundenen Geräte wird zurückgegeben.
... und viele weitere Funktionen.
Der Lazarus-Code
Code: Alles auswählen
unit cleware3_unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
USB: Pointer;
implementation
const USBaccessDLL = 'USBaccess.dll';
function InitObject: Pointer; stdcall; external USBaccessDLL name 'FCWInitObject';
function OpenCleware(Obj: Pointer): Integer; stdcall; external USBaccessDLL;
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
USB := InitObject;
Button1.Caption := FloatToStr(OpenCleware(USB));
end;
end.
Beim Compilieren kommen verschiedene Fehlermeldungen:
z.B. dass die Funktion FCWInitObject in der DLL nicht gefunden wurde.
Heisst das: 1) die DLL wurde gefunden aber die Funktion darinnen nicht? oder 2) die DLL wurde nicht gefunden?
Die DLL ist sowohl im Applikationsverzeichnis, sowie im Systemverzeichnis '...windows/system32' vorhanden.
Habe sowohl 'stdcall' als auch 'cdecl' versucht...
Stimmt etwas mit den Informationen zur DLL nicht?
Mit LabView konnte ich vor einiger Zeit die DLL ansprechen und alles hatte funktioniert.
Doch warum funktioniert es hier mit Lazarus nicht?
Ich bin sicher, es ist ein Anfängerfehler. Vermutlich fehlt irgendwo eine kleine Zeile, ein Komma oder sonst etwas...?!
Danke für jegliche Hinweise. Theo.