Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String in Result? (https://www.delphipraxis.net/18550-string-result.html)

TheMiller 20. Mär 2004 17:28


String in Result?
 
Hi Leute,

ich habe eine DLL programmiert, die prüft, ob spezielle Programme installiert sind, indem sie auf die Registry zugreift. Das ist ja eine Funtion. Aber warum kann ich folgendes nicht schreiben?

Delphi-Quellcode:
Result:='Data installed in '+Reg.ReadString('asb')
Es wird immer nur der String angezeit, und das, was nach dem Plus steht, wir nie angezeit. Auch nicht, wenn dies eine Variable mit einem String ist.

Wie kann ich das so schreiben, das mein Programm den String mit ausgibt?


Danke im Voraus

DJ-SPM

chritzl 20. Mär 2004 17:32

Re: String in Result?
 
haste mal gekuckt, ob der string (schon) in der registry drinsteht?

himitsu 20. Mär 2004 17:34

Re: String in Result?
 
Bist du sicher, das Reg.ReadString auch an der Richtigen Stelle ließt, den bei einem Fehler gibt ReadString einen leeren String zurück?

TheMiller 20. Mär 2004 17:44

Re: String in Result?
 
Hey,

ich kann auch folgendes eingeben:

Delphi-Quellcode:
Result:='Data installed in '+'asbsdf'

oder

var a:String;
begin
  a:='hallo';
Result:='Test'+a
end;
und er gibt nur 'test' aus....

himitsu 20. Mär 2004 18:19

Re: String in Result?
 
Nimm mal statt String ShortString zu verwenden.

Oder ließ dir mal diesen Teil aus der OH durch.
Zitat:

Der Shared-Memory-Manager (nur Windows)
Wenn eine DLL unter Windows Routinen exportiert, die lange Strings oder dynamische Arrays als Parameter oder als Funktionsergebnis übergeben (entweder direkt oder in Records bzw. Objekten), müssen die DLL und ihre Client-Anwendungen (oder DLLs) die Unit ShareMem verwenden. Dasselbe gilt, wenn eine Anwendung oder DLL mit New oder GetMem Speicherplatz reserviert, der in einem anderen Modul durch einen Aufruf von Dispose oder FreeMem wieder freigegeben wird. ShareMem sollte in der uses-Klausel der Programme oder Bibliotheken, von denen sie eingebunden wird, immer an erster Stelle stehen.

ShareMem ist die Schnittstellen-Unit für den Speichermanager BORLANDMM.DLL, der es Modulen ermöglicht, dynamisch zugewiesenen Speicherplatz gemeinsam zu nutzen. BORLANDMM.DLL muss mit Anwendungen und DLLs weitergegeben werden, die ShareMem einbinden. Wenn eine Anwendung oder DLL ShareMem verwendet, ersetzt BORLANDMM.DLL den Speichermanager dieser Anwendung oder DLL.
Es kann sein, das ein "falsches" Stringende erkannt wird:
Result := 'Data installed in '#0 + 'asbsdf'#0;

Also das die Strings als nullterminierte Strings behandelt werden und dort ist bei der ersten #0 Schluß (Result := 'Data installed in '#0;)


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