Я пытаюсь выяснить, как использовать функции WinAPI из Pascal Script/Inno Setup. Я не нашел много примеров кода, как это сделать, и я не программист Pascal. Вот что я сделал до сих пор:Как использовать PathCombine() из WinAPI в Pascal Script/Inno Setup?
Импорт функции
function PathCombine (
pszPathOut : PChar;
pszPathIn : PChar;
pszMore : PChar
) : PChar;
external '[email protected] stdcall';
и использовать его как это:
function InitializeSetup(): Boolean;
var
a, b,c : PChar;
s : string;
begin
SetLength(s, 256); { soon it gets working I'll switch to use MAX_PATH instead of }
a := 'C:';
b := 'one\two';
c := PathCombine(s, a, b);
MsgBox(s, mbInformation, MB_OK);
end;
Выход заключается в следующем:
Ожидаемый результат является:
C: \ один \ два
Я довольно уверен, что я доступ к значениям мусора в памяти, но я не знаю, почему, как это исправить?
Но для 'PathCombineW' у вас нет' PWideChar' ... – TLama
@TLama Я знаю об этом. Но поскольку нам действительно не нужно возвращаемое значение, вы можете взломать его с помощью функции PathCombine (pszPathOut: string; pszPathIn: string; pszMore: string): PAnsiChar; external'[email protected] stdcall '; 'Правильно? –
Да, это может работать. Хотя я бы предпочел подделать возвращенный указатель, например. как «кардинал», чтобы не допустить его привязку к строке. – TLama