Как передать строковую переменную функции, которая ожидает 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);