![]() |
Übersetzung C -> Delphi
Hallo,
ich habe etwas Probleme, eine Header-Datei von C nach Delphi 2006 zu übersetzen. Ich habe folgende Deklaration:
Code:
Diese habe ich so übersetzt:
DLL_EXPORT signed int FAR PASCAL searchReader(int* port, unsigned char* version, unsigned char* type);
Delphi-Quellcode:
Aufruf der Funktion:
Function searchReader(var port : Integer;
var version : PChar; var &type : PChar) : Integer; external 'IFreader.dll';
Delphi-Quellcode:
Beim Aufruf der Funktion bekomme ich jedoch eine Zugriffsverletzung. Kann mir jemand sagen, was ich falsch mache?
var port, res : Integer;
version, xtype : PChar; begin res := SearchReader(port, version, xtype); if res >= 0 then begin lstStatus.Items.add('SearchReader successful'); lstStatus.Items.add('Port: ' + intToStr(Port)); lstStatus.Items.add('Version: ' + Version); lstStatus.Items.add('Type: ' + xType); end else begin lstStatus.Items.add('SearchReader Error: ' + intToStr(res)); end; end; Danke! Jens |
Re: Übersetzung C -> Delphi
Transferiere mal version und type zuvor in lokale Variablen
|
Re: Übersetzung C -> Delphi
Hm, Bahnhof...? :oops:
Ich habe doch im Aufruf Version und Type als lokale Variablen deklariert. Das ist vermutlich nicht das, was Du meinst, oder? |
Re: Übersetzung C -> Delphi
Delphi-Quellcode:
version, xtype : string;
begin res := SearchReader(port, PChar(version), PChar(xtype)); |
Re: Übersetzung C -> Delphi
Zitat:
[Pascal Fehler] unitfrmMain.pas(33): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden Version und Type sind ja Rückgabewerte der Funktion. Daher auch als VAR deklariert. |
Re: Übersetzung C -> Delphi
Funktioniert:
Delphi-Quellcode:
?
...
var version, xtype : PChar; sversion, stype: string; begin res := SearchReader(port, version, xtype); if res >= 0 then begin sversion := version; stype := xtype; lstStatus.Items.add('SearchReader successful'); lstStatus.Items.add('Port: ' + intToStr(Port)); lstStatus.Items.add('Version: ' + sversion); lstStatus.Items.add('Type: ' + sType); end; ... |
Re: Übersetzung C -> Delphi
Leider nein, aber das ist ja auch im Prinzip das selbe, wie meine erste Version.
Aufruf von res := SearchReader(port, version, xtype); wobei version und xtype als PChar deklariert sind. Bei Dir wird nur nachher aus dem PChar ein String gemacht. Die Zugriffsverletzung tritt ja schon beim Aufruf von SearchReader auf. |
Re: Übersetzung C -> Delphi
Hast du mal testweise das var weggelassen?
|
Re: Übersetzung C -> Delphi
Auch dann habe ich die selbe Fehlermeldung.
|
Re: Übersetzung C -> Delphi
Sorry, falls unqualifiziert: Ist unsigned char* nicht eher PByte?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz