2016-04-05 14 views
1

Ich würde gerne in der Lage sein, die Funktion UrlCreateFromPathW von Shlwapi.dll in meinem Installer-Skript zu verwenden, aber ich konnte es nicht zum Funktionieren bringen.Inno Setup - UrlCreateFromPath

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

Ich habe zusammengeschustert die folgenden von anderen „Inno Setup“ getaggt Fragen hier, und von der DLL an der JEDI Übersetzung flüchtig blickt. TryUrlCreateFromPath gibt immer false zurück. Jede Hilfe wäre sehr willkommen.

[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; 

Antwort

1

Die pcchUrl ist ein In/Out-Argument. Bei der Eingabe muss es eine Anzahl von Zeichen enthalten, die in pszUrl zugewiesen sind.

Sie initialisieren es nicht. Es ist höchstwahrscheinlich standardmäßig 0, daher gibt UrlCreateFromPathE_INVALIDARG zurück.

initialisieren es mag:

charcount := INTERNET_MAX_URL_LENGTH; 
+0

Wonderful! Danke, dass du darauf hingewiesen hast, das funktioniert perfekt. Ihnen vielmals für Ihre Hilfe verpflichtet. – AMarch