AGB  ·  Datenschutz  ·  Impressum  







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

VarPtr in Delphi ?

Ein Thema von goose33 · begonnen am 17. Sep 2005 · letzter Beitrag vom 17. Sep 2005
Antwort Antwort
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#1

VarPtr in Delphi ?

  Alt 17. Sep 2005, 01:30
Hallo,

eine Frage:
Ich hab wiedermal ein Stück c++ die ich nicht nach Delphi
übersetzen kann. Vielleicht kann jemand helfen ?

Hier der Code :

Delphi-Quellcode:
Here is the modified code that will do the job

Dim dwResult as Long
Dim dwString as string
Dim b(23) as byte 'defined a byte array (24 values)
Dim result as string
'will contain the final string
Dim i as integer

FSUIPC_Initialization

If FSUIPC_Open(SIM_ANY, dwResult) Then
If FSUIPC_Read (&H3160,24,VarPtr (b(0)), dwResult) Then 'read all bytes at offset &H3160 in byte array
If FSUIPC_Process(dwResult) Then
For i=0 to 255
If b(i)=0 then exit for
'leave at 0 terminator
result=result+Chr(b(i)) 'otherwise adds to result (don't forget the Chr)
Next
End If
End If
FSUIPC_Close
EndIf
Das müsste ich irgendwie in Delphi zustande bekommen

Wie mach ich das ? Die frage ist dieses "VarPtr (b(0))" hauptsächlich und wie ich die Variable b definieren muss ?

Dank Euch
Matthias
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 01:39
Moin Matthias,

also zuerst mal: Das ist Visual Basic nicht C++

b müsste meiner Ansicht nach so aussehen:

Delphi-Quellcode:
var
  b : array [0..23] of byte;
und übergeben müsstest Du wohl

@b[0]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 01:40
hi,

eventuell hättest du ja mal google benutzen können

Zitat:
------------- schnipp -------------
procedure TTMainform.BBetankClick(Sender: TObject);
var dwResult : DWORD; a: real;
begin
FSUIPC_open(SIM_ANY, dwResult);
FSUIPC_Read($0B80,4, @a ,dwResult);
FSUIPC_Process(DWResult);
MaxTanklinks.Caption := FloatToStrF(a, ffFixed, 15, 2);
end;
------------- schnapp -------------

1) Du hast "a" als Real definiert. Ein Real ist 8 Byte (64 Bit) groß. Im FSUIPC_Read gibst Du als zweiten Parameter aber "4" an, d.h. Du liest nur 4 Bytes in eine 8 Byte große Variable ein. Das hat zum Ergebnis, dass die anderen 4 Byte so bleiben wie sie sind -> Datenmüll.

2) Laut dem FSUIPC-SDK ist 0B80 4 Byte groß. Du kannst also nicht einfach die 4 Byte in eine 8-Byte Variable lesen. Also musst Du was Passendes dafür nehmen: DWORD.
1 Byte: BYTE
2 Byte: WORD
4 Byte: DWORD
8 Byte: REAL
Abgesehen davon liefert 0B80 die Tankkapazität in US Gallonen zurück. Du musst die also noch in Pfund, Liter, Kilogramm, oder was immer Du haben willst, umrechnen.

Hier die Auflösung des Ganzen:

procedure TTMainform.BBetankClick(Sender: TObject);
var
dwResult, capacity : DWORD;
value : double;
begin
FSUIPC_open(SIM_ANY, dwResult);
FSUIPC_Read($0B80, 4, @capacity ,dwResult);
FSUIPC_Process(DWResult);
value := double(capacity);
// Hier Umrechnung einfügen
MaxTanklinks.Caption := FloatToStrF(value, ffFixed, 15, 2);
end;

Bis dann,
Hans
Dreamfleet / Team Eurowings Professional
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#4

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 01:45
Hallöchen,

( oh VB also )

also so hab ich mir das ja auch gedacht und das war dabei rausgekommen :

Delphi-Quellcode:
var
   b : array[0..23] of byte;
   AcTyp : string;
begin

      FSUIPC_Read($3160, 24, @bAc[0], dwResult);
      FSUIPC_Process(dwResult);
      for a := 0 to 255 do
      begin
        if bAc[a] = 0 then
          break
        else AcTyp := AcTyp + PChar(bAc[a]);
      end;
      mPhase.Lines.Add('Aircraft2 '+AcTyp);
Leider geht das so irgendwie nicht
Weiss auch nicht warum ??

Du ?

Danke
Matthias
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#5

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 02:03
Habs rausgefunden

nicht PChar sondern Char muss es sein

Danke
matthias
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#6

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 02:30
Zitat von ACE-ppc:
hi,

eventuell hättest du ja mal google benutzen können

Zitat:
------------- schnipp -------------
procedure TTMainform.BBetankClick(Sender: TObject);
var dwResult : DWORD; a: real;
begin
FSUIPC_open(SIM_ANY, dwResult);
FSUIPC_Read($0B80,4, @a ,dwResult);
FSUIPC_Process(DWResult);
MaxTanklinks.Caption := FloatToStrF(a, ffFixed, 15, 2);
end;
------------- schnapp -------------

1) Du hast "a" als Real definiert. Ein Real ist 8 Byte (64 Bit) groß. Im FSUIPC_Read gibst Du als zweiten Parameter aber "4" an, d.h. Du liest nur 4 Bytes in eine 8 Byte große Variable ein. Das hat zum Ergebnis, dass die anderen 4 Byte so bleiben wie sie sind -> Datenmüll.

2) Laut dem FSUIPC-SDK ist 0B80 4 Byte groß. Du kannst also nicht einfach die 4 Byte in eine 8-Byte Variable lesen. Also musst Du was Passendes dafür nehmen: DWORD.
1 Byte: BYTE
2 Byte: WORD
4 Byte: DWORD
8 Byte: REAL
Abgesehen davon liefert 0B80 die Tankkapazität in US Gallonen zurück. Du musst die also noch in Pfund, Liter, Kilogramm, oder was immer Du haben willst, umrechnen.

Hier die Auflösung des Ganzen:

procedure TTMainform.BBetankClick(Sender: TObject);
var
dwResult, capacity : DWORD;
value : double;
begin
FSUIPC_open(SIM_ANY, dwResult);
FSUIPC_Read($0B80, 4, @capacity ,dwResult);
FSUIPC_Process(DWResult);
value := double(capacity);
// Hier Umrechnung einfügen
MaxTanklinks.Caption := FloatToStrF(value, ffFixed, 15, 2);
end;

Bis dann,
Hans
Dreamfleet / Team Eurowings Professional

Hallöchen,

hast Du da vielleicht irgendwas verwechselt ???
Ichhab doch nix mit Betanken und schon gar nicht mit einer definition von a und als real auch nicht zu tun ??

Matthias

Ps: Trotzdem ist bei mir noch irgendein Fehler drin ?? Weisst Du vielleicht nen rat ?
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 12:45
Hi,

wenn du evtl. das Projekt mal Posten kannst .. könnte ich bestimmt weiterhelfen ... aber ohne ganaue infos worum es geht
wird es schwer
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#8

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 13:29
Hallöchen,

ging doch blos um den komischen VarPtr. Das ganze Project
das sind mittlerweile umer 10000 Zeilen...ich glaub das fänden die Leute hier nicht wirklich
lustig

Dank Dir aber trotzdem....


es ging ja nur um das hier :
Delphi-Quellcode:
var
   b : array[0..23] of byte;
   AcTyp : string;
begin

      FSUIPC_Read($3160, 24, @bAc[0], dwResult);
      FSUIPC_Process(dwResult);
      for a := 0 to 255 do
      begin
        if bAc[a] = 0 then
          break
        else AcTyp := AcTyp + Char(bAc[a]); // hier stand PChar() das war falsch
      end;
      mPhase.Lines.Add('Aircraft2 '+AcTyp);
end;

Matthias
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 15:46
Moin Matthias,

Zitat von goose33:
das sind mittlerweile umer 10000 Zeilen...ich glaub das fänden die Leute hier nicht wirklich
lustig
Auch so ein Projekt wäre kein Problem, denn Du könntest es ja als Anhang posten, wenn es erforderlich ist.
Ob sich dass dann jemand ansehen würde ist dann natürlich wieder eine andere Frage
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:55 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