package |
尚未結案
|
DN
一般會員 發表:5 回覆:4 積分:1 註冊:2004-08-16 發送簡訊給我 |
各位先進大家好、我寫用BPL把我的應用程式變小、找了2天的資料、從網路上的範例照做、卻遇到問題了、實在找不到原因、上來發問下、麻煩大家幫我看下、感謝 以下是主程式的CODE、從範例照寫、還做了一個BPL(QQQ)、裡面只放了一個FORM、跟按鈕、點了LOAD 、跟SHOW、程式沒有報錯、但是QQQF就是不會顯示、只有主畫面而已
[code delphi] implementation {$R *.dfm} procedure UnLoadAddInPackage(Module: THandle); var i: Integer; M: TMemoryBasicInformation; begin { Make sure there aren't any instances of any of the classes from Module instantiated, if so then free them. (this assumes that the classes are owned by the application) } for i := Application.ComponentCount - 1 downto 0 do begin VirtualQuery(GetClass(Application.Components[i].ClassName), M, SizeOf(M)); if (Module = 0) or (HMODULE(M.AllocationBase) = Module) then Application.Components[i].Free; end; UnRegisterModuleClasses(Module); UnLoadPackage(Module); end; procedure TMainForm.LoadAddInPackage(PkgName: string); begin ListBox1.Items.AddObject(PkgName, Pointer(LoadPackage(PkgName))); end; function CreateFormByClassName(const ClassName: string): integer; var AClass: TPersistentClass; AForm: TCustomForm; begin Result := mrNone; { Note that TApplication "owns" this form and thus it must be freed prior to unloading the package } AClass := GetClass(ClassName); if AClass <> nil then begin AForm := TComponentClass(AClass).Create(Application) as TCustomForm; Result := AForm.ShowModal; end; end; procedure TMainForm.BitBtn1Click(Sender: TObject); begin CreateFormByClassName('TQQQF'); end; procedure TMainForm.BitBtn2Click(Sender: TObject); begin LoadAddInPackage('e:\test\BPL\QQQ.bpl'); end; procedure TMainForm.BitBtn3Click(Sender: TObject); var i: integer; begin i := ListBox1.ItemIndex; if i < 0 then Exit; UnloadAddInPackage(HMODULE(ListBox1.Items.Objects[i])); ListBox1.Items.Delete(i); end; [/code] |
DN
一般會員 發表:5 回覆:4 積分:1 註冊:2004-08-16 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
mephise
高階會員 發表:4 回覆:149 積分:205 註冊:2004-02-09 發送簡訊給我 |
|
DN
一般會員 發表:5 回覆:4 積分:1 註冊:2004-08-16 發送簡訊給我 |
|
DN
一般會員 發表:5 回覆:4 積分:1 註冊:2004-08-16 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
dll也好, bpl也好, 不外乎分散主程式exe的程式大小, 其實在一般執行上, 載入bpl或dll, 還是要吃記憶體, 所以沒啥分別,
只不過以dll或bpl切出來, 是為了程式好維護, 有時一點小東西要改, 如果是落在dll內, 只要改dll就好, 不用整個程式改, 這在做自動更新識別上會更容易, 想想看, 如果是整個exe改掉, 用自動更新該如何主動更新被佔用的exe, 而會建議dll, 是因為 dll 在站上的討論多過bpl, 所以學起來會比較快 ===================引 用 DN 文 章=================== 也谢谢mephise的抽空回答、那我了解了、还是把他简单好了、5M也还好、了解、谢谢、呵呵 |
wzwcn
一般會員 發表:0 回覆:5 積分:6 註冊:2010-06-27 發送簡訊給我 |
你好,你需要在你的bpl里注册你的TQQQF才能用GetClass找到窗体类。可以这样:
initialization RegisterClass(TQQQF); 另外,你这样自己加载package并创建窗体不太方便,这里有一个开源框架,支持bpl和dll两种方式,可以方便的分模块,有兴趣可以看看: http://code.google.com/p/tangram-plugin-framework/
------
今天真是,我喜欢今天...
編輯記錄
wzwcn 重新編輯於 2011-09-12 19:51:48, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |