user1884060
user1884060

Reputation: 75

How do I pass a string variable to a function that expects a PChar?

I have this code:

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

How can I replace the literal in the third argument with a string variable? If I use code like below it doesn't compile.

var
  dir: string;

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

Upvotes: 7

Views: 5298

Answers (2)

Nick Hodges
Nick Hodges

Reputation: 17108

ShellExecute is a Windows API. Thus, you need to pass the PChar type to it.

If I assume correctly that your dir variable is a string, then you can cast the string to be a PChar, and call ShellExecute as follows:

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

Upvotes: 7

Andreas Rejbrand
Andreas Rejbrand

Reputation: 108929

I assume that dir is of type string. Then

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

should work. Indeed, the compiler tells you this; it says something like

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

(Also notice that you normally use SW_SHOWNORMAL when you call ShellExecute.)

Upvotes: 9

Related Questions