Ich habe mir jetzt schon einiges hier durchgelesen über DLLs in Delphi einbinden, ich habe es auch schon teilweise hinbekommen, dass die Funktionien funktioniert haben , habe trotzdem immer einen Zugriffsfehler bekommen beim Starten obwohl die funktionen funktioniert haben.
Benutze Delphi 7 und will eine
dll einbinden die aus einem VB6 Project stammt.
zu finden ist das project unter:
http://burster.de/de/products/servic.../Thailand.html
Dort ist das Beispiel prog VB_Sample_4422.zip zum download und die
dll befindet sich in der BP4422_V.1.6zip für LabWindows/CVI -, LabView - und
Win32-Treiber V1.6
Ich habe die
dll so eingebunden gehabt:
oben im interface
Code:
const
DLLNAME = 'bp4422.dll';
dann die deklarationen der exportierten funktion zum initialisieren des comport 4
Code:
function bp4422_init(COMPort: integer; baudRate: integer; timeout_seconds: double; blockCheck: integer; groupAddress: integer; userAddress: integer; var instrumentIDString: PChar; resetDevice: integer; var instrumentID: Pinteger): integer; stdcall; external DLLNAME;
dann der aufruf
Code:
procedure Tfrm_c4SU.Button9Click(Sender: TObject);
var
error: integer;
instidstring: PChar;
instid: Pinteger;
error := bp4422_init(4,9600,2,0,0,0,instidstring,0,instid);
ShowMessage('error = ' + IntToStr(error));
end;
was mache ich falsch bekomme trotzdem zugriffsfehler beim starten
Muss ich bei Delphi die
dll noch verweisen?? habe sie als suchpfad und für den debugger angegeben. Noch irgendwo verweisen? bei Vb6 kann man sie einfach verweisen und dann funktioniert das schon wie ist das bei delphi genau? was vergesse ich?!
benutze ich die falsche aufrufkonvention ??
eventuell falsche parameter?
Die funktion scheint zu funktionieren da er mir als error eine 0 liefert am ende. (in der dokumentation der
dll steht bei error = 0 success) ,aber trotzdem der zugriffsfehler am ende
EDIT: instidstring und instidname müssten eigentlich was zurück bekommen das tut instidstring jedoch nicht, beim steppen im debugger steht bei instdit jetzt $1,was scheinbar auch richtig so ist und bei instidstring steht nix
EDIT2: muss ich vorher vielliecht sowas aehnliches schreiben?
Code:
instidstring := StringOfChar(' ', 50);