AGB  ·  Datenschutz  ·  Impressum  







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

Wie kommt man an den Wert von PByte

Ein Thema von Troelli · begonnen am 31. Jan 2010 · letzter Beitrag vom 31. Jan 2010
Antwort Antwort
Troelli

Registriert seit: 1. Mai 2003
15 Beiträge
 
Delphi 7 Enterprise
 
#1

Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 18:43
Ich habe ein Problem mit Variablen die ich gerne aus einer C DLL hätte.

In C wäre das
DWORD // DLL Version, defined OLS_VERSION
WINAPI GetDllVersion(
PBYTE major, // major version
PBYTE minor, // minor version
PBYTE revision, // revision
PBYTE release // release/build

Meine Version könnte so lauten:
TGetDllVersion = function(
Major: PBYTE; // major version
Minor: PBYTE; // minor version
Revision: PBYTE; // revision
Release: PBYTE // release/build
): DWORD; stdcall;

Das sollte mit Delphi 2009 gehen. Aber Delphi 7 kennt Pbyte gar nicht. Ist das richtig?
Und was ist PByte überhaupt? Vom Namen her würde ich sagen es ist ein Zeiger auf EIN Byte irgendwo im Speicher. Richtig?
Zurück bekomme ich doch den Zeiger auf mein Byte, aber wie komme ich an den Wert des Bytes herran?
Kann man genauso verfahren wie mit Pchar? Muss ich überhaupt PByte benutzen ?
Hat einer eine Idee?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 18:48
PByte heißt Pointer auf Byte
Markus Kinzler
  Mit Zitat antworten Zitat
Troelli

Registriert seit: 1. Mai 2003
15 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 18:58
Ok ... hatte ich schon geahnt und glaube ich auch so geschrieben.
Ist es denn nun exakt ein Byte oder können es auch mehrere sein?
Wie übergebe ich jetzt der C Funktion diese Pbytes ?
Von der logik her bekomme ich ja in meinem Beispiel nur mehrere Zeiger zurück.
Aber ich muss der C Funktion ja irgend eine Variable wieder abieten damit sie die Zeiger speichern kann.
Übergebe ich da leere Zeigervariablen in der Hoffnung das die C Funktion sie dort abspeichert?
Und wenn ich jetzt die Adressen habe, wie bekomme ich dann die echten werte aus dem Speicher ?
Vielen Dank für die Hilfe.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 19:07
Der Dereferenzierungsoperator in Delphi ist "^". D.h.:
Delphi-Quellcode:
var
  EinByte: Byte;
  EinPByte: PByte;
begin
  EineProzedur(EinPByte);
  EinByte := EinPByte^;
end;
Danach steht in EinByte der Wert auf den EinPByte zeigt.

Ich glaube nicht, dass es hier in diesem Beispiel mehrere Bytes sein können. Zwar werden Arrays in C gern als lose Pointer realisiert, aber um solche zu sein müssten irgendwo noch Längenangaben sein, die ich hier nicht sehe. (Bei PChar ist's etwas anders, da dort in der Regel #0 als Terminator agiert, und man daher auch ohne Längenangaben auskommt.)

Edit: Ich seh grad, das sind ja garkeine var-Parameter. In dem Fall:
Delphi-Quellcode:
var
  Major, Minor, Revision, Release: Byte;
  Foo: DWORD;
begin
  Major := 1;
  Minor := 2;
  Revision := 3
  Release := 4; // Beispielwerte halt :)
  Foo := GetDllVersion(@Major, @Minor, @Revision, @Release);
end;
"@" ist also das Gegenstück zu "^", dass einen Pointer auf die folgende Variable liefert.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 19:14
Da hier wohl PByte kein Zeiger auf ein Byte-Array ist, sondern einfach nur ein Zeiger auf ein Byte, ...

TGetDllVersion = function(var Major, Minor, Revision, Release: Byte): LongWord; stdcall;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 19:14
Ich nehme mal an, dass einfach nur die Referenz auf die Variable übermittelt werden soll.
Somit kann man es in Pascal, wo wir das Var-Keyword kennen, besser so schreiben:
Delphi-Quellcode:
type
  TGetDllVersion = function(
    var Major: BYTE; // major version
    var Minor: BYTE; // minor version
    var Revision: BYTE; // revision
    var Release: BYTE // release/build
): DWORD; stdcall;

...

var
  Major, Minor, Revision, Release: Byte;
  Foo: Cardinal;
begin
  Foo := GetDllVersion(Major,Minor,Revision,Release);
end;
[EDIT]Verdammt, himi war schneller [/EDIT]
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 19:17
Hm, das ist noch besser, stimmt
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#8

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 19:24
Zitat von implementation:
[EDIT]Verdammt, himi war schneller [/EDIT]
*tröst*, die 2 Sekunden http://fnse.de/S05/1L9.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Troelli

Registriert seit: 1. Mai 2003
15 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Wie kommt man an den Wert von PByte

  Alt 31. Jan 2010, 19:35
Donnerkiesel seit Ihr schnell :O
Das ziehe ich mir jetzt erstmal ganz in Ruhe rein.
Vielen Dank erstmal für die Lösungsansätze, das bringt mich mit Sicherheit weiter.
  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 05:10 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