Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Übersetzung C -> Delphi (https://www.delphipraxis.net/135083-uebersetzung-c-delphi.html)

Nersgatt 4. Jun 2009 14:14


Übersetzung C -> Delphi
 
Hallo,

ich habe etwas Probleme, eine Header-Datei von C nach Delphi 2006 zu übersetzen.
Ich habe folgende Deklaration:
Code:
DLL_EXPORT signed int FAR PASCAL searchReader(int* port, unsigned char* version, unsigned char* type);
Diese habe ich so übersetzt:
Delphi-Quellcode:
  Function searchReader(var port : Integer;
                        var version : PChar;
                        var &type : PChar) : Integer; external 'IFreader.dll';
Aufruf der Funktion:
Delphi-Quellcode:
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;
Beim Aufruf der Funktion bekomme ich jedoch eine Zugriffsverletzung. Kann mir jemand sagen, was ich falsch mache?

Danke!
Jens

mkinzler 4. Jun 2009 14:17

Re: Übersetzung C -> Delphi
 
Transferiere mal version und type zuvor in lokale Variablen

Nersgatt 4. Jun 2009 14:24

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?

mkinzler 4. Jun 2009 14:27

Re: Übersetzung C -> Delphi
 
Delphi-Quellcode:
version, xtype : string;
begin

  res := SearchReader(port, PChar(version), PChar(xtype));

Nersgatt 4. Jun 2009 14:29

Re: Übersetzung C -> Delphi
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
version, xtype : string;
begin

  res := SearchReader(port, PChar(version), PChar(xtype));

Das geht leider nicht:
[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.

mkinzler 4. Jun 2009 14:36

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;
...
?

Nersgatt 4. Jun 2009 14:43

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.

mkinzler 4. Jun 2009 14:44

Re: Übersetzung C -> Delphi
 
Hast du mal testweise das var weggelassen?

Nersgatt 4. Jun 2009 14:46

Re: Übersetzung C -> Delphi
 
Auch dann habe ich die selbe Fehlermeldung.

Satty67 4. Jun 2009 14:52

Re: Übersetzung C -> Delphi
 
Sorry, falls unqualifiziert: Ist unsigned char* nicht eher PByte?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz