多次讀取bpl版本資訊後亂掉? |
尚未結案
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
參考http://delphi.ktop.com.tw/topic.php?topic_id=44451
我實作如下的程式碼, 發現執行迴圈執行第五次之後, 就讀不到資訊, 我在想可能在GetFileVersion函式裡出錯, 礙於個人經驗, 實在找不出問題出在那裡, 請有經驗的前輩出面指導一下, 謝謝您....
function Versionstring(Ms,Ls:Longint):string; begin Result:=Format('%d.%d%d%d',[HiWord(Ms),Loword(Ms),Hiword(Ls),Loword(ls)]); end; function GetFileVersion(FFileName:string):string; var Size:Integer; Size1:Longword; RezBuffer:string; Handle:DWord; FixedFileINfoBuf:PVSFixedFileINfo; begin // Check Version info size Size:=GetFileVersionInfoSize(PChar(FFileName),Handle); if Size<0 then begin Result:='No Version info available'; abort; end; SetLength(RezBuffer,Size); if not GetFileVersionInfo(PChar(FFileName),Handle,Size,PChar(RezBuffer)) then begin Result:='Cannot obtain version info.'; abort; end; // Fill Fixed file info if VerQueryValue(PChar(RezBuffer),'\',pointer(FixedFileINfoBuf),Size1) then begin if Size1 |
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
引言: aquarius兄, 謝謝您的回應 abort和exit在這裡效果應該是一樣的吧? 不知道是不是win api重覆call而導致執行不準確的問題(bug?) 不知道還有沒有其它的前輩能撥空看看?你有實際改用 exit 試試嗎? Abort 和 Exit 當然是有很大的不一樣呀!! 請用單步執行去跑跑看就知道了. exit 是跳出一個 Procedure/function abort 是結束目前的 Process, 直接跳回程式的 Main Loop. 也就是說一次可能就跳出好幾層的Procedure. 我把你那個 GetFileVersion 中的 abort 改成 exit 後, 連續執行 1000 次都還正常. 若使用 abort , 讀到第一個沒有 version info 的 BPL 後就整個跳掉, 後面的檔案都不會去檢查. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com |
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |