2016-04-05 34 views
1

Shlwapi.dllのUrlCreateFromPathW関数をインストーラスクリプトで使用できるようにしたいが、それを動作させることができませんでした。Inno Setup - UrlCreateFromPath

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

私は一緒に石畳他の「Inno Setupの」から、次のここでの質問をタグ付け、およびDLLのためのJEDIの翻訳をちらっと見てきましたから。 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になるため、UrlCreateFromPathE_INVALIDARGを返します。

好き、それを初期化します。

charcount := INTERNET_MAX_URL_LENGTH; 
+0

ワンダフル!それを指摘していただきありがとうございます、それは完全に動作します。あなたの助けを借りてあなたに義務づけられました。 – AMarch