Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eigene Daten in PChar übergeben... (https://www.delphipraxis.net/17269-eigene-daten-pchar-uebergeben.html)

Lui2003 2. Mär 2004 11:13


Eigene Daten in PChar übergeben...
 
Hallo Zusammen,

ich denke ich sitze gerade auf der Leitung :cry: aber ich komme nicht auf die Lösung meines ansich sehr trivialen Problems :(

Also, ich habe folgenden Code:
Delphi-Quellcode:
PChar('DSN=Meine Verbindung'#0'Description=Ein Text'#0'Server=192.168.0.1'#0'Database=TestDB'#0'User=Wortmann'#0'Password=geheim'#0)
So und nun möchte ich die Werte für DSN, Descrition etc. nicht fest im Code "verbraten", sondern variabel meinen Wünschen anpassen. Wie bekomme ich nun den Wert eines Eingabefeldes auf z.B. DSN? Wie kann ich "DSN" im PChar etwas zuweisen?

Vielleicht liegts an der Erkältung, ich weiss es nicht, aber zur Zeit sehe ich nur Baum :(... Danke schonmal für Eure Hilfe!

Gruss
Lui

MarcoWarm 2. Mär 2004 11:24

Re: Eigene Daten in PChar übergeben...
 
zum Beispiel
Delphi-Quellcode:
myCString:=PChar(Edit1.Text);
oder
Delphi-Quellcode:
myCString:=StrPCopy(myCString,Edit1.Text);
ersteres favorisiere ich, da es weniger zu tippen ist und Du nicht unbedingt eine PChar Variable brauchst

Nach nochmaligem Überlegen - warum nicht nur:
Delphi-Quellcode:
s:='Text1='+Edit1.Text+#0+'Text2='+Edit2.Text;
myCString:=PChar(s);
Du wirst bloß mit dem Zeichen #0 ein Problem bekommen, da PChar nullterminierte Strings sind und somit der String bloß bis zum ersten #0 ausgewertet werden wird - nun ich kann mich irren

ciao

Marco

Chewie 2. Mär 2004 11:34

Re: Eigene Daten in PChar übergeben...
 
PChar werden in der Regel durch die Nullterminierung abgeschlossen. Es gibt aber auch Anwendungsfäl´le, z.B. in der WinAPI, wo die Länge mitübergeben wird und deshalb der PChar nullterminiert sein darf. Oder die 0 dient als Trennzeichen und der string wird abgeschlossen durch zwei Nullen.

MarcoWarm 2. Mär 2004 11:37

Re: Eigene Daten in PChar übergeben...
 
@Chewie:

Thx for that information :dp:

Lui2003 2. Mär 2004 12:19

Re: Eigene Daten in PChar übergeben...
 
Schön zu sehen das bei Euch auch ein kleiner Knoten entsteht, aber wahrscheinlich liegt es an meiner mangelnden Beschreibung.

Also ich möchte das:
Delphi-Quellcode:
PChar('DSN=Meine Verbindung'#0'Description=Ein Text'#0'Server=192.168.0.1'#0'Database=TestDB'#0'User=Wortmann'#0'Password=geheim'#0)
schon so lassen, nur soll z.B. "DSN=Meine Verbindung" nicht fest darin stehen. Ich möchte dem "DSN" etwas variables zu weisen können oder auch das "Server=192.168.0.1" mit einer anderen IP-Adresse versehen können.

Hm... Evtl. wäre der letzte Vorschlag von Marco die Lösung, mal gucken...

Nachtrag:
So geht es schonmal...
Delphi-Quellcode:
sDSNADD := 'DSN='+edidsn.text+#0+'Description='+edibeschreibung.text+#0+'Server='+ediip.text+#0;

APP 2. Mär 2004 12:37

Re: Eigene Daten in PChar übergeben...
 
Hallo Chewie,
Zitat:

Zitat von Chewie
PChar werden in der Regel durch die Nullterminierung abgeschlossen. Es gibt aber auch Anwendungsfäl´le, z.B. in der WinAPI, wo die Länge mitübergeben wird und deshalb der PChar nullterminiert sein darf. Oder die 0 dient als Trennzeichen und der string wird abgeschlossen durch zwei Nullen.

das wusste ich gar nicht, ich dachte ein pChar ist ein Zeiger auf einen nullterminierten String.
Kannst Du mir ein Beispiel geben zu Deinen obigen Erklärungen?

Chewie 2. Mär 2004 13:13

Re: Eigene Daten in PChar übergeben...
 
Genaugenommen ist ein PChar ein Zeiger auf ein Zeichen. In der Regel wandern in C geschriebene API-Funktionen nun solange da durch, bis sie eine 0 finden. Dann gilt für sie der String als beendet.
Es gibt aber auch Fälle, in denen eine 0 durchaus Bestandteil eines Strings sein darf. Beispiel MySQL-API: Dort gibt es für Querys die Funktionen mysql_query und mysql_real_query. Der Unterschied ist folgender: Bei mysql_query wird erwartet, dass der Zeiger auf einen nullterminierten String zeigt, deshalb ist keine Angabe der Größe erforderlich. Bei mysql_real_query dagegen muss die Länge des Strings mitübergeben werden, deshalb darf der String aber auch Nullen enthalten.

Oder bei der WinAPI-Struktur OPENFILENAME: Bei den Filtereinstellungen wird ein Zeiger übergeben, der auf eine Reihe von nullterminierten Strings zeigt. Das Ende wird dadurch gekennzeichnet, dass dort 2 Nullen stehen müssen.


Edit: Jetzt, wo ich mir das oben durchlese, merke ich, dass das etwas undurchsichtig war. :oops: Das sollte jetzt klarer sein ;)

MarcoWarm 2. Mär 2004 13:14

Re: Eigene Daten in PChar übergeben...
 
Normalerweise ist PChar ein Pointer auf den Beginn einer Zeichenkette. Wenn Du dann die Zeichenkette abrufst, liest das Programm dann so lange bis es bei #0 ankommt. Das ergibt dann den String. Dann gibt es jedoch Prozeduren wie StrMove. Da ist das Nullbyte uninterressant, da kommt es nur auf die übergebene Länge an.

- So kann man im Speicher ne ganze Menge Murks anstellen - deswegen ist das auch ein "unsicherer Typ"

Ciao

marco

@Chewie - oops da war ich wohl zu langsam beim tippen :zwinker:


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