Inno 设置 - UrlCreateFromPath

Inno Setup - UrlCreateFromPath

我希望能够在我的安装程序脚本中使用 Shlwapi.dll 中的 UrlCreateFromPathW 功能,但我无法让它工作。

HRESULT UrlCreateFromPath(
  _In_    PCTSTR pszPath,
  _Out_   PTSTR  pszUrl,
  _Inout_ DWORD  *pcchUrl,
          DWORD  dwFlags
);

我从其他 "Inno Setup" 标记的问题中拼凑了以下内容,并浏览了 DLL 的 JEDI 翻译。 TryUrlCreateFromPath 总是 returns 错误。如有任何帮助,我们将不胜感激。

[Code]
const
  INTERNET_MAX_URL_LENGTH = 2048 + 32 + 3;
  S_OK = [=11=]000000;

function UrlCreateFromPathW(pszPath, pszUrl: string; var pcchUrl: DWORD; dwFlags: DWORD): HResult; external 'UrlCreateFromPathW@Shlwapi.dll stdcall';

function TryUrlCreateFromPath(const path: string; var url: string): Boolean;
var
  charcount: dword;
  flags: dword;
begin
  SetLength(url, INTERNET_MAX_URL_LENGTH);
  flags := 0;
  Result := UrlCreateFromPathW(path, url, charcount, flags) = S_OK;
  if Result then
    SetLength(url, charcount); 
end;

function InitializeSetup: Boolean;
var
  URL: string;
  ErrorCode: Integer;
begin
  Result := True;

  if TryUrlCreateFromPath('c:\temp', URL) then
    MsgBox('URL: ' + URL, mbConfirmation, MB_OK)
  else
    MsgBox('ERROR', mbError, MB_OK);
end;

pcchUrl 是一个 in/out 参数。输入时,它必须包含分配在 pszUrl.

中的多个字符

你没有初始化它。它很可能默认为 0,因此 UrlCreateFromPath returns E_INVALIDARG.

初始化如下:

charcount := INTERNET_MAX_URL_LENGTH;