Как передать строковую переменную функции, которая ожидает PChar?

у меня есть этот код:

ShellExecute(Handle, 'open',
             'C:UsersuserDesktopsamplemenuWTSHELPstart.html',
             nil, nil, sw_Show);

Как заменить литерал в третьем аргументе строковой переменной? Если я использую код, как показано ниже, он не компилируется.

var
  dir: string;

dir := 'C:UsersuserDesktopsamplemenuWTSHELPstart.html';
ShellExecute(Handle, 'open', dir, nil, nil, sw_Show);

2 ответов


Я предполагаю, что dir типа string. Тогда

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

должны работать. Действительно, компилятор говорит вам это; он говорит что-то вроде

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

(Также обратите внимание, что вы обычно используете SW_SHOWNORMAL когда вы называете ShellExecute.)


ShellExecute является API Windows. Таким образом, вам нужно пройти PChar введите его.

если я правильно предполагаю, что ваша переменная dir является строкой, то вы можете привести строку к PChar, а вызов ShellExecute следующим образом:

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