線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2078
推到 Plurk!
推到 Facebook!

如何動態建立一個上窗

尚未結案
zerocool
一般會員


發表:4
回覆:1
積分:1
註冊:2003-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-20 03:09:31 IP:203.203.xxx.xxx 未訂閱
我想用c Builder建立一個dll程式,並在這個dll程式中動態地建立一個上 Form 請問要如何達成呢???
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-21 07:35:36 IP:61.224.xxx.xxx 未訂閱
引言: 我想用c Builder建立一個dll程式,並在這個dll程式中動態地建立一個上 Form 請問要如何達成呢???
看不太懂您的問題... 請問一下, 您的軟體架構是什麼呢? 例如:您的主程式(.>沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-21 10:49:13 IP:211.162.xxx.xxx 未訂閱
小弟的做法是这样的,不知道是否满意,谢谢. 用BCB来建立一个包含窗体的DLL(包含Form),然后在EXE文件中对该DLL动态的载入. 首先在BCB环境中创建一个DLL工程,存盘为DLL.bpr和DLLMain.hpp(不需要修改其中的代码) 新建一个窗体(单击工具栏上的New Form按钮),这相当于在工程中添加一个窗体(将窗体的名字改为frmAbout),我是在窗体上放了一幅图片^_^,存盘为About.cpp和About.h 在DLL中将这个窗体输出,以供外部模块调用,为此要给该DLL增加相应的输出函数,在主菜单中选择File---New---Unit,将这个新生成的单元文件存盘为:DLLFunc.h和DLLFunc.hpp. 现在就要在DLL中添加内容了:    #include  #pragma hdrstop #include "DLLFunc.h" #include "About.h" //这个头文件要添加哦 //--------------------------------------------------------------------------- void __export ShowAbout() //静态 { frmAbout = new TfrmAbout(Application); frmAbout->ShowModal(); delete frmAbout; } extern "C" void __export AnotherAbout() //动态 { frmAbout = new TfrmAbout(Application); frmAbout->ShowModal(); delete frmAbout; } #pragma package(smart_init) 而在DLLFunc.h中应把ShowAbout()函数加上 #ifndef DLLFuncH #define DLLFuncH //--------------------------------------------------------------------------- void __export ShowAbout(); //要把它加上 #endif 好,现在把DLL的编译一下(快捷键是Ctrl F9 ^_^),DLL的工作是做完了,现在应该开始调用它了 新建一个工程,然后在窗体上添加两个Button,来分别实现静态调用和动态调用DLL中的窗体. #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { #include "DLLFunc.h" //这个按钮的作用就是静态调用 ShowAbout(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //加载DLL HINSTANCE ins; ins = LoadLibrary("DLL.dll"); if(ins == NULL) throw "不能载入DLL,请仔细观察一下,看DLL是否在当前的目录及系统目录下!"; //加载函数 FARPROC proc; proc = GetProcAddress(ins,"_AnotherAbout"); if(proc == NULL) { FreeLibrary(ins); throw "不能得到进程的地址!"; } proc(); if(!FreeLibrary(ins)) { throw "不能释放!"; } } 好了,现在就完成了,我的环境为: Win2000 Server SP3 BCB5 肯定有不足之处,请大大们指出,谢谢!!! 人生在勤,不索何获?
------
人生在勤,不索何获?
zerocool
一般會員


發表:4
回覆:1
積分:1
註冊:2003-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-23 01:43:14 IP:203.203.xxx.xxx 未訂閱
謝謝~~~~~ 問題已經解決了~~~~~ 感謝 dllee 及 bigdogchina~~~~~
x8051
一般會員


發表:12
回覆:18
積分:6
註冊:2004-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-09 23:34:42 IP:218.172.xxx.xxx 未訂閱
引言: 謝謝~~~~~ 問題已經解決了~~~~~ 感謝 dllee 及 bigdogchina~~~~~
初學者!! 請問:DLL 宣告為靜態與動態有何差異?範圍在那裡?
系統時間:2024-04-27 23:51:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!