關於package的問題 |
缺席
|
melticemelt
一般會員 發表:22 回覆:29 積分:10 註冊:2002-10-01 發送簡訊給我 |
我已經被linker搞了好幾個鐘頭了.........快發瘋啦!!
不知道Delphi會不會有這樣的問題... 之前有試過成功的將程式分割成package
但是步驟有點亂
所以想重新再試一次 今天開個新project重試一次卻成功不了
一開始Project1裡面有Unit1(Form1) Unit2(Form2)
我把Unit2從Project1移除
新增Package1加入Unit2
設定package options為runtime only
build package產生bpl bpi lib 可是我在Project1不管如何設定Packages和Directories/Conditionals
linker就是視而不見
總是出現Unresolved external TForm2 ... ... Unit1.obj 在Project1的Unit1中加入
#pragma link "Package1.lib"
可以build成static link的執行檔
但是寫成這樣卻不行build
#pragma link "Package1.bpi"
出現錯誤
[Linker Error] Unresolved external 'TForm2::' referenced from D:\PROGRAMMING\BCB\PROJECT\TEST PACKAGE\4\UNIT1.OBJ
[Linker Error] Unresolved external '__fastcall TForm2::TForm2(Classes::TComponent *)' referenced from D:\PROGRAMMING\BCB\PROJECT\TEST PACKAGE\4\UNIT1.OBJ 目前最新發現如果把Package1的Unit2內修改
#pragma package(smart_init,weak)
(我根本不懂什麼是weak,前幾天的package沒加這個也可以運作啊)
這樣build出來的bpi
#pragma link "Package1.bpi"
可以build成功
但用tdump -em Project1.exe
卻看不到它有import Package1.bpl
(也就是他已經把Package1 static link進exe裡面了)
這不是我要的結果啊 誰來救救我啊!!
已經搞了快半天了啊 Unit1.cpp
//--------------------------------------------------------------------------- #includeUnit2.cpp //--------------------------------------------------------------------------- #include發表人 - melticemelt 於 2004/10/25 11:32:54 發表人 - melticemelt 於 2004/10/25 14:02:55 |
melticemelt
一般會員 發表:22 回覆:29 積分:10 註冊:2002-10-01 發送簡訊給我 |
找到了
自作聰明用了
Form2 = new TForm2(Application);
改用之前的用法就對了
Application->CreateForm(GetClass("TForm2"),&Form2); 可是為什麼不行用new呢?
記得看Delphi的範例都是用.Create就行了 順便說說之前的經驗
如果想改用LoadPackge
就要把Unit1的判斷改成
if(!Application->FindComponent("Form2"))
或是用迴圈搜尋Screen物件(我懶的用迴圈)
來確定Form2是否存在
並在Unit2加入
void mystartup(void)
{
RegisterClass(__classid(TForm2));
}
#pragma startup mystartup
來註冊class name 發表人 - melticemelt 於 2004/10/25 17:04:39
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |