AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Parameter bei Shellexecute übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Parameter bei Shellexecute übergeben

Ein Thema von S - tefano · begonnen am 20. Dez 2002 · letzter Beitrag vom 21. Dez 2002
Antwort Antwort
Seite 2 von 2     12   
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#11
  Alt 21. Dez 2002, 17:24
D.h. also, der Compiler macht aus 'Irgendein String' PChar('Irgendein String'), wenn ein PChar benötigt wird?[/b]

Fast. Beispiel:
Delphi-Quellcode:
var
  s: String;
begin
  s := 'Hello world';
  Shellexecute(0, 'open', s, nil, nil, SW_SHOW);
Das geht nicht.
Aber:
  Shellexecute(0, 'open', 'Hello world', nil, nil, SW_SHOW); Das geht.

Im ersten Fall ist s ein String und bleibt es auch. Im zweiten Fall macht der Compiler aus 'Hello world' einen nullterminierenden String.

Möglichkeiten, um aus s einen nullterminierenden String zu machen:
  • Mit PChar casten: PChar(s). PChar gibt die Adresse des ersten Zeichens zurück. Wenn der String leer ist, wird ein NULL-Zeiger zurückgegeben.
  • Direkt die Adresse des ersten Zeichens angeben: Integer(@s[1]). Dies erzwingt einen Aufruf von UniqueString, welche sicher stellt, dass eine gültige Adresse zurückgegeben wird. Davor erfolgt noch ein Aufruf von setlength.
    procedure UniqueString(var str: string); overload;
    Zitat:
    Following a call to SetString, str is guaranteed to reference a unique string—that is, a string with a reference count of one. For normal string handling, there is no need to call UniqueString. UniqueString is used only in cases where an application casts a string to a PChar or PWideChar and then modifies the contents of the string.
    Wird also auch bei einem Cast mit PChar aufgerufen.
  • pointer(s), hier wird einfach der String zu einem Pointer gecastet. Das ist auch gleichzeitig die schnellste Methode, da keine versteckten Funktionsaufrufe, wie bei einem Cast mit PChar, durchgeführt werden.
Nach zu lesen hier: High Performance Delphi - String Optimization Guidlines. Die Seite ist sehr zu empfehelen, wenn es darum geht Programmcode zu optimieren. Einfach mal etwas drin rumlesen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:56 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