Einzelnen Beitrag anzeigen

sneumann
(Gast)

n/a Beiträge
 
#1

dll einbinden delphi 7 beispiel zugriffsfehler

  Alt 19. Okt 2011, 09:41
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);

Geändert von sneumann (19. Okt 2011 um 09:55 Uhr)
  Mit Zitat antworten Zitat