2016-04-05 5 views
1

Я хотел бы иметь возможность использовать функцию UrlCreateFromPathW из Shlwapi.dll в моем сценарии установки, но я не смог заставить ее работать.Inno Setup - UrlCreateFromPath

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

Я починил следующий из другого «Setup Inno» меченый вопросы здесь, и от глядя на JEDI перевод для DLL. TryUrlCreateFromPath всегда возвращает false. Любая помощь будет высоко оценена.

[Code] 
const 
    INTERNET_MAX_URL_LENGTH = 2048 + 32 + 3; 
    S_OK = $00000000; 

function UrlCreateFromPathW(pszPath, pszUrl: string; var pcchUrl: DWORD; dwFlags: DWORD): HResult; external '[email protected] 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; 

ответ

1

pcchUrl является аргументом in/out. На входе он должен содержать несколько символов, выделенных в pszUrl.

Вы не инициализируете его. Он, скорее всего, по умолчанию равен 0, поэтому UrlCreateFromPath возвращает E_INVALIDARG.

Инициализировать это нравится:

charcount := INTERNET_MAX_URL_LENGTH; 
+0

Замечательно! Спасибо, что указали, что это работает отлично. Большое вам спасибо за вашу помощь. – AMarch