Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Get(anyPointer) Verständnisfrage (https://www.delphipraxis.net/174567-get-anypointer-verstaendnisfrage.html)

p80286 30. Apr 2013 09:48

AW: Get(anyPointer) Verständnisfrage
 
Ich denke Du solltest Dir noch einmal genau überlegen was du (fragen) willst.
Aus den verschiedenen Informationshäppchen (toolsAPI Gettext) habe ich dies herausdestilliert
Delphi-Quellcode:
 IOTAEditReader = interface(IUnknown)
    ['{26EB0E4F-F97B-11D1-AB27-00C04FB16FB3}']
    function GetText(Position: Longint; Buffer: PChar; Count: Longint): Longint;
  end;
Wenn es hierum geht, was daran ist unverständlich?

Was den Namen einer Funktion/Prozedur angeht, Du kannst ihr Namen geben wie es Dir einfällt("Pukkelmon","hh_136gtz_99","Bundesinnenmi nister"). Es entspricht aber gutem Stil, wenn der Name auch die Funktionalität wiederspiegelt.

Gruß
K-H

Nintendo 2. Mai 2013 12:36

AW: Get(anyPointer) Verständnisfrage
 
Zitat:

Zitat von p80286 (Beitrag 1213502)
Ich denke Du solltest Dir noch einmal genau überlegen was du (fragen) willst.
Aus den verschiedenen Informationshäppchen (toolsAPI Gettext) habe ich dies herausdestilliert
Delphi-Quellcode:
 IOTAEditReader = interface(IUnknown)
    ['{26EB0E4F-F97B-11D1-AB27-00C04FB16FB3}']
    function GetText(Position: Longint; Buffer: PChar; Count: Longint): Longint;
  end;
Wenn es hierum geht, was daran ist unverständlich?

Heißt das, das diese Funktion trotz ihres Namens einen Text in der Variablen Buffer erwartet, den die Fuktion dann an die an das Interface angeschlossene Software übergibt?

Andersherum klappt es nämlich nicht. Ich kann also nicht, wie ich bei dem Namen GET erwartet hätte einen Text aus der angeschlossenen Software über die Variable Buffer auslesen.

Zitat:

Zitat von p80286 (Beitrag 1213502)
Was den Namen einer Funktion/Prozedur angeht, Du kannst ihr Namen geben wie es Dir einfällt("Pukkelmon","hh_136gtz_99","Bundesinnenmi nister").

Bei dieser angenommenen Namensgebung würde ich allerdings erwarten, das ich von der Routine 3 Werte erhalte:

- Pukkelmon, das Computespiel (oder eine Kinderserie im Fernsehen?)
- eine Softwarebibliothek mit dem Namen "hh_136gtz_99"
- die Webseite des Bundesinnenministers

Da hier kein Routinenname angegeben ist, könnte mir letzterer Parameter natürlich auch den Namen des aktuell amtierenden Bundesinnenministers anzeigen oder mich zur Webseite des Bundesinnenministeriums leiten.

Zitat:

Zitat von p80286 (Beitrag 1213502)
Es entspricht aber gutem Stil, wenn der Name auch die Funktionalität wiederspiegelt.

Gruß
K-H

Konsens! :thumb:


Zurück zu meiner Frage: Leider weiß ich dummerweise nicht,wie ich hier richtig fragen soll. Ich kenne nur mein Problem und suche dafür eine Lösung.

Diese kann auch darin bestehen, das der Name der fraglichen Funktion, ja es geht um die obige Funktion, das dieser Name falsch gewählt wurde von Borland/Codegaer/Embarcadero, da diese Funktion nicht, wie ich angenommen habe, einen Text aus einem an das OTA angeschlossene IDE Plugin ausliest, sondern einen Text, der an die Variable Buffer übergeben und dann der Funktion übergeben wird, an das Plugin sendet.

Also, in welcher Richtung erfolgt hier die Übertragung des PChar-Strings?

Sendet diese Funktion den Text, den ich in Buffer übergebe oder liest die Funktion einen Text, den sie dann an Buffer übergibt, damit ich ihn verwenden kann?

DeddyH 2. Mai 2013 12:49

AW: Get(anyPointer) Verständnisfrage
 
Ich kenne die ToolsAPI zwar nicht auswendig, aber anhand der Parameter ist zu vermuten, dass das wie in Unmengen Win32-API-Funktionen auch gedacht ist: man reserviert Speicher und übergibt dessen Adresse dann samt der Angabe der Datengröße an die Routine, welche ihn dann mit Daten befüllt.

[edit] Beispielhaft sei hier mal GetWindowsDirectory genannt. [/edit]

Nintendo 2. Mai 2013 13:55

AW: Get(anyPointer) Verständnisfrage
 
Zitat:

Zitat von DeddyH (Beitrag 1213815)
Ich kenne die ToolsAPI zwar nicht auswendig, aber anhand der Parameter ist zu vermuten, dass das wie in Unmengen Win32-API-Funktionen auch gedacht ist: man reserviert Speicher und übergibt dessen Adresse dann samt der Angabe der Datengröße an die Routine, welche ihn dann mit Daten befüllt.

[edit] Beispielhaft sei hier mal GetWindowsDirectory genannt. [/edit]

Schon richtig, allerdings

Delphi-Quellcode:
UINT WINAPI GetWindowsDirectory(
  _Out_  LPTSTR lpBuffer,
  _In_   UINT uSize
);
gibt es da die Direktive _out die es ja in DElphi neben var auch gibt. Out bzw. Var fehlt aber in der Funktion GetText() oben.

und eben das verwirrt mich.

DeddyH 2. Mai 2013 14:16

AW: Get(anyPointer) Verständnisfrage
 
Die Übergabe eines Pointer-Parameters als Var-Parameter (also interne Verwendung eines weiteren Pointers darauf) macht in den wenigsten Fällen Sinn, und PChar ist nun einmal ein Pointer-Typ.

[edit] Ich habe gerade mal ein wenig gestöbert, der Kernsatz von MS zu [in] und [out] scheint mir zu sein:
Zitat:

The [in] and [out] attributes specify the direction in which the parameters are passed.
[/edit]

Nintendo 2. Mai 2013 18:36

AW: Get(anyPointer) Verständnisfrage
 
Zitat:

Zitat von DeddyH (Beitrag 1213837)
Die Übergabe eines Pointer-Parameters als Var-Parameter (also interne Verwendung eines weiteren Pointers darauf) macht in den wenigsten Fällen Sinn, und PChar ist nun einmal ein Pointer-Typ.

[edit] Ich habe gerade mal ein wenig gestöbert, der Kernsatz von MS zu [in] und [out] scheint mir zu sein:
Zitat:

The [in] and [out] attributes specify the direction in which the parameters are passed.
[/edit]

Das heißt dann also, das die GetText() Funktion aus dem ToolaAPI trotz ihres Namens einen String an Buffer übergibt?

Delphi-Quellcode:
var myText: PChar;

procedure SendText(Thisone: PChar);
begin
  GetText(1, THisOne, StrLen(ThisOne));
end;

begin
  myText := 'Das hier';
  SendText(myText);
end.
Denn die fragliche GetText() Funktion hat nämlich keinen Var bzw. Out Parameter. Also nicht

Delphi-Quellcode:
function GetText(Position: Integer; out Buffer: PChar; ...)

sondern

Delphi-Quellcode:
function GetText(Position: Integer; Buffer: PChar;...
Das hieße also dann das ich den Text nur senden, aber nicht von irgendwoher lesen kann?

.

Furtbichler 2. Mai 2013 18:54

AW: Get(anyPointer) Verständnisfrage
 
'_OUT_' (C) und
Delphi-Quellcode:
out
(Delphi) haben *nichts* miteinander zu tun.

Mann, und so schwer kann das doch nicht sein: Ich will Schweinswürstel essen. Du hast welche.

1. Ich nehme mir einen Schuhkarton (=Adresse), und sorge dafür, das dort 10 leckere Schweinswürste reinpassen (=alloziiere Speicher)
2. Ich gebe Dir den Schuhkarton und Du legst da deine leckeren Schweinswürste rein.
3. Du gibst mir den Schuhkarton zurück
4. Ich grille die Würste und esse sie auf.
5. Den Schuhkarton brauche ich nun nicht mehr und daher schmeisse ich ihn weg (=Speicher freigeben)

Preisfrage: Ist der Schuhkarton verändert worden?
[x] Nein, der Karton ist der Gleiche, nur der Inhalt wurde verändert
[ ] Ja, der Karton wurde verändert. Es ist ja nun kein Schuhkarton mehr, sondern ein Leckerschweinswürstelkarton :wall:

PS: Warum ich auf Schweinswürstel komme? Weil ich gerade welche gemacht habe!

DeddyH 2. Mai 2013 18:54

AW: Get(anyPointer) Verständnisfrage
 
Du musst Dir darüber im Klaren werden, was die Nutzdaten sind und was die Zeiger darauf. Die aufrufende Routine reserviert den zu befüllenden Speicher und gibt dessen Zeiger sowie die größe des reservierten Speichers an die Funktion weiter. Diese schreibt ihre Daten dann an diese Adresse. Stell Dir das so vor, als würde ich bei Dir 4 Kisten Bier bestellen und Dir zum Verladen meinen Autoschlüssel geben.
Delphi-Quellcode:
procedure VerladeBier(Ziel: PKofferraum; Anzahl: integer);
begin
  VerladeKisten(Ziel^, Anzahl);
end;
Ziel ist also mein Kofferraumschlüssel und Anzahl die Menge der zu verladenden Kisten. Dabei habe ich als Auftraggeber dafür zu sorgen, dass die bestellte Menge auch tatsächlich in den Kofferraum, zu dem der übergebene Schlüssel gehört, hineinpasst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz