![]() |
Shellexecute und Word
Moin Gemeinde,
mal wieder eine einfache Frage: Ich möchte ein Word-Dokument mit Word öffnen und verwende dazu Shellexecute. Rufe ich die Funktion mit Pfad- und Dateiangabe auf, funktioniert alles. Beim Aufruf mit einer Variablen, die den selben Pfad enthält bekomme ich einen Code 2 zurück. Beispiel hardcoded = funktioniert:
Delphi-Quellcode:
iReturnVal := ShellExecute(0, nil, 'C:\Users\jupp\Office-Dokumente\Serienbrief-Vorlage.dotx', nil, nil, 0);
Beispiel mit Variable = funktioniert nicht:
Delphi-Quellcode:
Das gleiche Konstrukt mit mailto funktioniert übrigens ..
getmem(pDatei, 256);
sDatei := DateiscEdit.Text; pDatei := StringToWideChar(sDatei, pDatei, 256); iReturnVal := ShellExecute(0, 'open', pDatei, nil, nil, 0); Was mache ich da falsch? Danke & schönen Abend, alex |
AW: Shellexecute und Word
Wir wissen nicht, wie pDatei definiert ist, und wir wissen auch nicht, ob in sDatei letztlich wirklich derselbe absolute Pfad drinsteht.
Aber es geht viel einfacher, und ohne viel Klimbim drumherum:
Delphi-Quellcode:
Das Verb kann übrigens auch einen Unterschied machen, auch 'open' statt nil (wenn auch selten).
iReturnVal:= ShellExecute(0, 'open', PChar(sDatei), nil, nil, 0);
{oder auch} iReturnVal:= ShellExecute(0, 'open', PChar(DateiscEdit.Text), nil, nil, 0); Grüße Dalai |
AW: Shellexecute und Word
Erstmal 2 = ERROR_FILE_NOT_FOUND bzw. SE_ERR_FNF
und steht im Edit wirklich genau das Gleiche, wie vorher in der Konstante? Zitat:
das ist nicht das Selbe
Delphi-Quellcode:
iReturnVal := ShellExecute(0, nil, ..., nil, nil, 0);
iReturnVal := ShellExecute(0, 'open', ..., nil, nil, 0);
Delphi-Quellcode:
getmem(pDatei, 256); <<<< 256 Bytes
pDatei := StringToWideChar(sDatei, pDatei, 256); <<< 256 Chars
Delphi-Quellcode:
getmem(pDatei, 256 * SizeOf(Char));
ähhh
Delphi-Quellcode:
getmem(pDatei, MAX_PATH * SizeOf(Char));
nja
Delphi-Quellcode:
getmem(pDatei, (Length(sDatei) + 1) * SizeOf(Char));
Aber erstmal sind statische Buffer saublöd, (statisch = sich nicht an den Inhalt anpassend, vor allem wenn es zu klein sein könnte) vor allem, da Microsoft seit Jahren versucht solchen Mist loszuwerden ![]() und irgendwelche Zahlen anstatt Konstanten sind noch unschöner. Was sagt denn der Debugger, zum Inhalt von pDatei? Welche Delphi-Version? Wenn nicht D2009 oder älter, dann selbst Schuld, wenn jemand (du) die Compilerwarnungen nicht liest. ![]() Aber eignentlich würde ich eher solch unnützes Rumkopieren einfach lassen.
Delphi-Quellcode:
iReturnVal := ShellExecute(0, nil, PChar(sDatei), nil, nil, 0);
iReturnVal := ShellExecute(0, nil, PChar(DateiscEdit.Text), nil, nil, 0); |
AW: Shellexecute und Word
Zitat:
das war die Lösung: Mit PChar als Parameter läuft's. :) Aber, für den Lerneffekt: Warum findet ShellExecute die Datei nicht, wenn ich die Stringumwandlung mit StringToWideChar mache? VG Alex |
AW: Shellexecute und Word
Zitat:
Vielleicht kommt dabei die (Er)Lösung. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 Uhr. |
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