Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi AnsiChar oder pAnsiChar (https://www.delphipraxis.net/7867-ansichar-oder-pansichar.html)

Pseudemys Nelsoni 23. Aug 2003 14:58


AnsiChar oder pAnsiChar
 
hoi

in der Application.MessageBox muss man ja als erstes die message der messagebox angeben...aber wieso ist der typ pAnsiChar??? und nciht string? was sind das für unterschiede?

sakura 23. Aug 2003 15:01

Re: AnsiChar oder pAnsiChar
 
Wieso? Das ist recht einfach. Die Deklaration stammt von MS und die arbeiten gerne mit Pointern.

AnsiString bzw. String sind in Delphi Pointer auf eine Pascal-/Delphi-spezifische Struktur, welche anders ist als die MS-PChar (PAnsiChar) Pointer.

Code:
PChar(String) -> Pointer auf das erste Byte des Strings, inklusive einer aufwendigen Kopieraktion.

Wenn der string garantiert nicht geändert wird, ist es besser mit

@String[1]

zu arbeiten.
...:cat:...

Luckie 23. Aug 2003 15:11

Re: AnsiChar oder pAnsiChar
 
Oder:
Delphi-Quellcode:
@(String1+String2)[1]
Oder:
Delphi-Quellcode:
pointer(String1+String2)

Pseudemys Nelsoni 23. Aug 2003 15:12

Re: AnsiChar oder pAnsiChar
 
aber wenn ich "Application.MessageBox('blabla Text', 'fehler', mb_ok);"

dann sieht ersteres für mich wie ein string aus, ich schnall jetzt einfach nur nicht was der unterschied ist :(

sakura 23. Aug 2003 15:13

Re: AnsiChar oder pAnsiChar
 
Delphi kennt den Unterschied und ist an dieser Stelle ein wenig flexibel, damit Du nicht einen extra Type-Cast machen musst. Verwirrend, aber praktisch ;-)

...:cat:...

Pseudemys Nelsoni 23. Aug 2003 15:16

Re: AnsiChar oder pAnsiChar
 
ok, danke für die hilfe, das kapier ich noch nicht ;)

sakura 23. Aug 2003 15:20

Re: AnsiChar oder pAnsiChar
 
Silent, da gibt es nicht viel zu verstehen. Delphi nimmt Dir oft viel Arbeit ab, in dem es verschiedene Dinge automatisch erledigt. Das macht Dir das Leben leichter. Wenn Du einen konstanten String eingibst, an einer Stelle wo die Deklaration einen PChar Wert erwartet, dann über gibt Delphi automatisch den korrekten Pointer um einen PChar daraus zu machen.

...:cat:...

Pseudemys Nelsoni 23. Aug 2003 15:23

Re: AnsiChar oder pAnsiChar
 
danke für die erklärung :), ich frage mich nur wieso Char und nicht String erwartet wird?

Christian Seehase 23. Aug 2003 15:27

Re: AnsiChar oder pAnsiChar
 
Moin Silent,

ein String ist ein array of char.

@sakura:
Zitat:

Zitat von sakura
Die Deklaration stammt von MS und die arbeiten gerne mit Pointern.

was bleibt ihnen bie C(++) auch anderes übrig für Werte > 32 Bit ;-)

sakura 23. Aug 2003 15:27

Re: AnsiChar oder pAnsiChar
 
Ah, ich sehe Deine Verwirrung und will mich um mehr Licht kümmern ;-)

Es wird ja nicht ein Char, sondern ein PChar erwartet. Ein Char ist, wie Du weisst ein einzelnes Zeichen. PChar ist ein Pointer auf das erste Zeichen in einem Array "vieler" Zeichen, wo das letzte Zeichen ein Nullwert (#0) ist. In Delphi enden alle Strings automatisch auf #0, um solche Casts auch leichter zu gestallten.

PChar müsstest Du Dir am Besten als einen Pointer auf @CharArray[0] vorstellen, wobei CharArray als array of Char definiert ist. (Nicht ganz korrekt, aber zur Veranschaulichung sollte es reichen)

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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