2011-05-12 34 views
6

我嘗試使用Delphi XE,編譯時出現Not Responding。它是否在你的計算機上工作或者是否有問題?編譯此函數時未響應?

function Test(const FileName: string; 
    const Force: boolean = false): boolean; 
var 
    IsAllowed: boolean; 
begin 
    result := false; 
    if FileExists(FileName) then 
    begin 
    try 
     if (Force) then 
     begin 
     result := false; 
     exit; 
     end; 
    finally 
     if IsAllowed then 
     DeleteFile(FileName); 
    end; 

    try 
     result := true; 
    except 
     result := false; 
    end; 
    end; 
end; 
+0

這個函數在我的Delphi編譯罰款2010 – 2011-05-12 09:33:29

回答

11

它編譯在我的電腦上。雖然我收到警告W1036變量'IsAllowed'可能尚未初始化。

更新:當我在使用子句中包含Windows時,我可以重現掛起。 分享到品質中心:QC93806

program hang_test; 

{$APPTYPE CONSOLE} 

uses 
    // Windows, // uncomment to include Windows -> hang on compile 
    SysUtils; 

function Test(const FileName: string; const Force: boolean = false): boolean; 
    // your function here 

begin 
    try 

    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
end. 

它看起來像一個bug;你應該在Quality Central報告它。

更新2:最小的情況下,其可重複掛起編譯:

function HangCompiler: Boolean; 
begin 
    try 
    Exit; // 1. exit from a try..finally 
    finally 
    DeleteFile(''); // 2. inlined function call in finally (include Windows to inline) 
    end; 
    // 3. try..except 
    try 
    Result := True; 
    except 
    Result := False; 
    end; 
end; 
+0

是啊,我覺得有它* *威力尚未初始化過的機會! – 2011-05-12 09:34:13

+0

我可以編譯它,如果我註釋掉'DeleteFile(FileName);'或'result:= true;'。你的Delphi XE的版本是什麼? – user 2011-05-12 09:35:30

+0

是的,使用條款中的Windows是麻煩製造者。我只是試着評論'Windows',我可以編譯這個函數。 – user 2011-05-12 09:40:38