工程分割为bpl包或dll的问题
我手上有几个项目,其中有一个有三百多个form,每次编译时都要花N多时间来linking..............
而且程序运行时,暴吃内存。我在网上找了两天,很多人提到把工程分割成bpl或dll,分割后,又涉及到一个数据库连接的问题,我想主程序登陆时有一个数据库连接,其它的dll或bpl都使用这个连接而不用新建连接。
网上得到的答案是:建立一个共享用的bpl,用它来连接数据库,然后在dll中均引入这个bpl,这样,加载的dll或bpl就只有一个连接的session连接到数据库了。
但网上的大多是delphi版的(delphi俺不太懂,照着上面的做出来的运行起来总是有问题),所以想请哪位能告诉我CB6里这样的实现方法,谢谢。
tdhome1203@126.com
[解决办法]
以前的帖子不都回答你了么,做成bpl最简单,啥都不用改.
[解决办法]
他的做法就是将数据库的操作交由bpl,其他由dll来做,包的调用和dll差不多,只是如果是动态调用包需要LoadPackage UnLoadPackage函数,具体的需要你自己来做了。
[解决办法]
你把它做成组件,然后添加到某个包里就可以了,就像BCB自己做的一样。
[解决办法]
用法與DLL基本一樣
//加載BPL包
unsigned int fHandle = LoadPackage(BplName);
if(fHandle)
{
//運行包中的函數
typedef PACKAGE void __stdcall TMyFun(void);
TMyFun* MyFun= (TMyFun*)GetProcAddress((HINSTANCE)fHandle, "MyFun");
if(MyFun)
MyFun();
//創建包的類,需要include相關頭文件。直接生成Form ,共用全局變量,比用DLL 方便多了。
TMyForm *pForm = new TMyForm(this);
pForm->MyADODataSet->Connection = ADOConnection1 ; //也可以在加載包時指定共用的連接
pForm->ShowModal();
delete pForm ;
}
//不用了就去掉,去掉前要把所有與包查關的實例都delete,否則會引起異常。
::UnloadPackage(fHandle );
[解决办法]
你好啊, PPower 不是回复你这个问题了吗.
多用心看看,学习这个是要有一点时间的,但是不是很长.
你用BCB那些BUTTON FORM ADO大部分都是这样来的.
你要的例子其实BCB自己就有的.就在的安装目录examples下就有. 另外一个地方ShellCtrls目录.你在BCB的安装目录下搜一下