Search code examples
stringdelphipchar

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);

Solution

  • 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.)