BCB6與BCB2006控件的安裝
--------------------------------------------------------------------------------
來源:http://www.ccrun.com 作者:不詳
一、安裝步驟:(這是廢話)
1、拿到源碼,要全部源碼,不要那種只有部分源碼的包,。
2、找到BPK文件,如果只有DPK文件,那就用DPK2BPK程序(網上下載)生成一個BPK文件,如果生成失敗,那就自己新建一個包(BPK或bdsproj),把DPK文件中包含的pas文件包含進去。
3、編譯與安裝。
二、注意事項:
1、Bpl包的重名問題,主要是不能重名,在Borland 與 system32下查找要安裝的包的名字,如果找到全刪除掉。
2、文件的重名問題,.pas.h.hpp.dcu.obj.lib.bpl.bpi.dfm.res 等文件均不應有重名現象,如果有應刪除舊版本文件。這裡介紹一個軟件完成這項工作Beyond Compare,其主頁是http://www.scootersoftware.com/
3、文件路徑的設定,編譯查找路徑,鏈接時查找庫文件的路徑,BCB2006的路徑設定會多一點,把Bcc32 Dcc32 ilink32 tasm32 等分開設定,這些均要一一設定正確,並注意先後次序對編譯器的影響。這3點注意事項要時刻想起,出了問題要先查證無誤。不要因為這些問題而讓自己陷入泥潭,那不值得。
三、編譯鏈接中的常見錯誤及排錯方法
1、找不到obj或dcu文件。看看你的硬盤是不是有這麼個文件,如果有那就是第二步所說的路徑問題。
2、如果文件沒加入項目,那是不會生成鏈接所需要的obj及lib文件的。這時要注意編譯多個包時的先後次序。
3、編譯開關控制文件,控件包代碼中的編譯開關一般放在一個文件(.inc)中,如果為pas後綴請改名。類似於下面代碼,如果在BCB2006下安裝,就要自己修改這個文件。
{$IFDEF VER180} //如果是用BDS2006編譯
{$IFDEF BCB} //BCB2006
{$DEFINE VER140} //那麼採用B6一樣的編譯開關
{$ELSE} //Delphi2006
{$DEFINE VER170} //那麼採用D9一樣的編譯開關
{$ENDIF}
{$ENDIF}
要用正確的編譯開關才能編譯正確。至於如何改,那要看具體的文件才行,這個一般也不難改。
4、關於DesignEditors這個單元的問題 , DCP文件的使用。
在BCB2006中,PAS代碼如果包含了這個DesignEditors單元,會引起編譯失敗,原因是BCB2006並沒有提供DesignEditors所要的全部源碼,這裡會提示說找不到Proxie這個文件。可是還是有方法安裝的。解決方式是通過.dcp(Delphi Compiled Packages)文件:
在 Project Options -- Pascal Compiler(Dcc32) -- Other Options 頁 ,有個use package .dcps when compling , 把其選上,同時填上所要的.dcp文件的名字,DesignEditors所需要的.dcp名字是designide(只填名稱就可以了,不要加後綴名哦),填上所要的dcp文件後,DesignEditors的問題得以解決。
在BCB6中,則是將這個dcp文件加入項目,或指定連接對應的lib文件。
5、代碼中的編譯錯誤
這裡指安裝在B2006的控件才會碰上,因為控件沒有for 2006 的,所以才有這問題,過一段時間控件升級,就沒這種問題了。
這只能是見招拆招了,沒有其他辦法。如rxlib中的變量與B2006的TControl新增屬性重名, ehlib中的因2006中TFieldType類型的增加要增加相對應的匹配項。
6、通過編譯後鏈接時出現的錯誤。 這就是眾人討厭的link av 錯誤
出現這類型錯誤時,首先要記得檢查上面說的注意事項,然後才進行後續的排錯工作。切記。這時要進行的也就是修改項目文件了。
這個在BCB6或BCB2006測試版中支持都不好,正式版還未知如何。是一個大毛病,令人心煩。如果有多個包要修改,建議使用工具UEdit32來輔助這項工作。在外部修改了包文件後要在BCB中關閉該項目重新打開後才生效,不要被BCB那個提示迷惑了。
要修改包文件,先介紹一下包文件的內容 :(Borland真應該自己做出一個工具修改自己的包文件)
bpl項目文件用XML格式,大部分一看就明白,說一下與linker有關的部分。
<LINKER>
<ALLOBJ value="c0pkg32.obj $(PACKAGES) Memmgr.Lib sysinit.obj $(OBJFILES)"/>
<ALLRES value="$(RESFILES)"/>
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/>
<OTHERFILES value=""/>
</LINKER>
這裡: $(PACKAGES) 是指上面定義的 PACKAGES value 的全部。$(OBJFILES).ALLOBJ ALLRES 這兩項一般不出現什麼問題。
ALLLIB 這項問題多,是LINK AV錯誤的發源地之一。裡面有兩大類:$(LIBFILES) $(LIBRARIES value)
$(LIBFILES) //BCB2006是小寫,B6是大寫。libraries
$(PACKAGES) //packages
$(SPARELIBS) //sparelibs
看看裡面就知道Bolrand做了些什麼,有時會有一大堆沒用到的包與庫都放在那,這裡Borland做得真差勁。
如果你安裝了很多包,那麼存盤的時候所有的包與庫都將寫到這裡面,別人如果沒有這個包就會出錯。這問題很弱智,但Borland就是這麼做。
把你項目中不用到的包與庫刪除掉。鏈接時也就不會報找不到什麼什麼庫了。
可是還是出現link AV ,這時可能出在 libraries 項,檢查libraries項,把重名的刪除(還會出現重名的borland真是),重排一下次序。
sparelibs項如果混亂就設成與libraries一樣。如果你的項目要鏈接vclsmp.lib,手工在這加上,不少lib在IDE中加不上的都在這手工加上。
設定這裡的庫列表需要對這些lib庫的熟悉,如果不清楚,可copy一另一個項目的libraries項過來試試看。
FILELIST 項,BCB可能會有一些沒用的文件也在其中,這裡會造成找不到這文件的錯誤。檢查一下,刪除訪該項即可。如果路徑不對,也改對它吧。
我就是通過修改libraries packages sparelibs FILELIST 解決了不少link av錯誤。其他選項在project->Optons都能設定,但這幾項只有手工改文件。
注意一定要先對上面提到的注意事項仔細做一遍。
關於Uedit
用UEdit可以查找函數出現在哪個lib或bpi文件中,從而知道該鏈接哪個lib。使用哪個bpi。當做內容替換時Uedit也很體貼。正確地連接lib bpi文件及使用dcp文件,可解決使用Borland沒給出源碼的那部分單元鏈接失敗的問題(全編譯時失敗)
關於B2006下安裝可參考: http://community.csdn.net/Expert/topic/4440/4440033.xml?temp=.9818537
我把自己在處理包的一些方法寫下來,供大家參考,希望能得到指正。這方面找不到Borand的Help,就做一下拋磚引玉的動作了。這些錯誤老是令人心煩不已。每次裝控件總忙個不停很煩,這本來就不是程序設計本身的事情呀。
PS. 蕭沖補dpk2bpk的使用: 它針對BCB6來處理,若是其它版本則可用同一作者的dpk2cpp產生package用的cpp檔,然後再由BCB的IDE來自行產生一個PACKAGE,含入此cpp。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment