AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzung C -> Delphi

Ein Thema von Nersgatt · begonnen am 4. Jun 2009 · letzter Beitrag vom 4. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:14
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
Jens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:17
Transferiere mal version und type zuvor in lokale Variablen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:24
Hm, Bahnhof...?

Ich habe doch im Aufruf Version und Type als lokale Variablen deklariert. Das ist vermutlich nicht das, was Du meinst, oder?
Jens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:27
Delphi-Quellcode:
version, xtype : string;
begin

  res := SearchReader(port, PChar(version), PChar(xtype));
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:29
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.
Jens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:36
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;
...
?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:43
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.
Jens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:44
Hast du mal testweise das var weggelassen?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:46
Auch dann habe ich die selbe Fehlermeldung.
Jens
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Übersetzung C -> Delphi

  Alt 4. Jun 2009, 14:52
Sorry, falls unqualifiziert: Ist unsigned char* nicht eher PByte?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.
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