2013-04-02 9 views
6

Ich habe diesen Code:Wie übergebe ich eine String-Variable an eine Funktion, die einen PChar erwartet?

ShellExecute(Handle, 'open', 
      'C:\Users\user\Desktop\sample\menu\WTSHELP\start.html', 
      nil, nil, sw_Show); 

Wie kann ich die wörtliche im dritten Argument mit einem String-Variable ersetzen? Wenn ich Code wie unten verwende, kompiliert er nicht.

var 
    dir: string; 

dir := 'C:\Users\user\Desktop\sample\menu\WTSHELP\start.html'; 
ShellExecute(Handle, 'open', dir, nil, nil, sw_Show); 
+2

Stellen Sie sicher, dass, wenn Sie Ihre Frage posten, Sie gehören so viele Informationen wie möglich. Hier sollten Sie uns gesagt haben, wie "dir" deklariert wird. Die Antworten unten nehmen eine Annahme über den Typ vor. –

+1

Ja, und obwohl ich das Problem kenne (was unten beantwortet wird), sollten Sie uns immer sagen, was die Fehlermeldung ist (in diesem Fall eine falsche Übereinstimmung zwischen String und PChar). –

Antwort

8

Ich gehe davon aus, dass dir vom Typ string. Dann

ShellExecute(Handle, 'open', PChar(dir), nil, nil, SW_SHOWNORMAL); 

sollte funktionieren. In der Tat sagt Ihnen der Compiler das; es sagt etwas wie

[DCC Error] Unit1.pas(27): E2010 Incompatible types: 'string' and 'PWideChar' 

(Beachten Sie auch, dass Sie in der Regel SW_SHOWNORMAL verwenden, wenn Sie ShellExecute nennen.)

+0

haha, du hast mich für eine Sekunde geschlagen! – jachguate

+1

Und eine andere Möglichkeit ist '@dir [1]' – OnTheFly

+0

Wenn es dir sagt, 'PWideChar', solltest du nicht PWideChar anstelle von' PChar' benutzen? Es gibt noch einige D2007 oder niedrigere Benutzer hier :) – Sebastian

6

ShellExecute ein Windows-API ist. Daher müssen Sie den Typ PChar an ihn übergeben.

Wenn ich davon ausgehe richtig, dass Ihre dir Variable ein String ist, dann können Sie die Zeichenfolge werfen ein PChar zu sein, und rufen ShellExecute wie folgt:

ShellExecute(Handle,'open', PChar(dir) ,nil,nil,sw_Show); 
Verwandte Themen