关于使用包(bpl)碰到的极奇怪的现象
leeky 2008-03-14 01:52:37 目前正在做一項目,考慮到方便管理及升级的需要,就使用主程序与多个包的形式實現。
其中有些包包含全局變量或对象,还有的包包含要被调用的函数,所以把它們加到Build with runtime packages中。
碰到以下問題:
1、在做好包后,在主程序中调用都正常;某次輸入代碼把变量输错,Delphi就在也不能出来提示信息,如输入"ShowMessage(",消息栏里立即提示由於代碼存在錯誤,所以不能唤起提示。但把这语句录完,而運行时又是正常的。
以上现象在多次从零构建主程序后都出现(只要你某次不小心输错代碼),一直如此,如果代碼有错,出错提示却在實際出借代碼之上几行的位置;
2、我在主程序中使用动态數組記錄各个bpl的版本等信息,
TPkgInfo = record
FileName : ShortString;
Size : integer;
DateTime : TDateTime;
PkgType : integer;
ClassName : ShortString; //本包输出的类名;
Version : ShortString; //版本信息。
//……还有其它一些信息
end;
var
PkgInfos : array of TPkgInfo;
在主程序中读取所有包信息及顯示出來都正确。
如以下代碼:
PkgInfos[bplCnt-1].ClassName := GetFileBuildInfo(tmpStr,'ClassName');
with PkgInfos[bplCnt-1] do
Memo1.Lines.Add('文件名:'+FileName+';版本:'+Version+';类名:'+ClassName);
程序運行正常,但由於我发现示的类名是我主窗体的类名,并不是我想要的包中的类名,所以我修改記錄類型TPkgInfo,把ClassName改为AClassName,同时在程序中作相应修改。这时提示后面的显示代碼中的"AClassName"未定義了!!我屏蔽掉顯示,程序運行正常,
这时我突发奇想,把赋值语句
PkgInfos[bplCnt-1].ClassName := GetFileBuildInfo(tmpStr,'ClassName');
改为:
PkgInfos[bplCnt-1].NNNClassName := GetFileBuildInfo(tmpStr,'ClassName');
程序居然也能運行!!这是什麽回事?
我懷疑Delphi沒有重新編譯,于是又在这代碼之前加了个ShowMessage调用,實際運行也顯示了消息,我就不明白隨便AClassName改成啥東西,程序都能運行!
请哪位高人解释一下?如果以前碰到过就好了。
先放50分,如有好的建議,我到時再加分