2014-02-02 2 views
1

Я нашел a solution, чтобы извлечь содержимое zip-файла, создав DLL, используя Ole. Я положил свой собственный контакт с этой функцией, но по некоторым причинам, компилятор жалуется, что результат работы функции никогда не используется ...Результат целочисленной функции - «Значение, присвоенное« [имя функции] »никогда не используется»

library unzipper; 

{ 
    title  : UnZip for InnoSetup 
    version : 1.0 
    author : Daniel P. Stasinski 
    email  : [email protected] 
    begin  : Fri Nov 22 17:31:33 MST 2013 
    license : None 
} 

uses 
    Windows, 
    SysUtils, 
    ComObj; 

const 
    SHCONTCH_NOPROGRESSBOX = 4; 
    SHCONTCH_AUTORENAME = 8; 
    SHCONTCH_RESPONDYESTOALL = 16; 
    SHCONTF_INCLUDEHIDDEN = 128; 
    SHCONTF_FOLDERS = 32; 
    SHCONTF_NONFOLDERS = 64; 

    UNZIP_SUCCESS = 0; 
    UNZIP_FAIL = -1; 

function UnzipFile(ZipFile, TargetFolder: WideString): Integer; stdcall; 
var 
    shellobj: variant; 
    ZipFileV, SrcFile: variant; 
    TargetFolderV, DestFolder: variant; 
    shellfldritems: variant; 
begin 
    Result:= UNZIP_FAIL; 
    try 
    shellobj := CreateOleObject('Shell.Application'); 
    ZipFileV := string(ZipFile); 
    TargetFolderV := string(TargetFolder); 
    SrcFile := shellobj.NameSpace(ZipFileV); 
    DestFolder := shellobj.NameSpace(TargetFolderV); 
    shellfldritems := SrcFile.Items; 
    DestFolder.CopyHere(shellfldritems, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL); 
    Result:= UNZIP_SUCCESS; 
    except 
    on e: exception do begin 
     Result:= GetLastError; 
    end; 
    end; 
end; 

exports 
    UnzipFile; 

begin 

end. 

Это дает мне сообщение ...

[DCC Подсказка] Unzipper.dpr (35): H2077 значение, присвоенное «UnzipFile» никогда не использовал

Это идет от первой строки кода в функции, которые я инициализирующий к постоянной -1 - что мой собственный код ошибки, если вся функция не работает. Я не считаю, что компилятор должен жаловаться на это, но я мог ошибаться. Я всегда уничтожаю все подсказки и предупреждения компилятора, но в этом случае компилятор больше жалуется.

Является ли это случайностью в компиляторе или что-то не так в коде?

+0

Почему вы решили распаковать этот путь, когда Delphi построил библиотеки? И т. П. Аббр. И так далее. И почему GetLastError будет здесь значимым? Я не вижу причин поверить в это. –

ответ

5

Компилятор верен, и в коде что-то не так. :-)

Функция будет либо возвращать UNZIP_SUCCESS, если она работает, либо результат GetLastError, если возникло исключение. Поэтому первое назначение на Result не требуется - нет пути выполнения, который мог бы вернуть UNZIP_FAIL.

4

Если вы удаляете назначение первой линии result, нет пути выполнения, который оставляет result неназначенным. Поэтому значение UNZIP_FAIL никогда не будет возвращено.

Смежные вопросы