hanjy
20436
|
2005/12/29 1:13:09 |
倒过来更好理解, 在dll中定义,建立并导出函数set,get, 主程序使用. |
nihaoqiang
18967
|
2005/11/6 18:41:00 |
bpl包制作共享的例子我已经发到盒子上了,可能很快就会放出来了,需要了解的朋友可以看一下 |
upp
9128
|
2004/11/5 12:07:51 |
nihaoqiang 兄,不知道可不可以麻烦您共享一个bpl包制作共享的例子让我们大家学习一下,谢谢了。 |
dinkysoft
9123
|
2004/11/5 8:22:58 |
BPL接触比较少。感觉DLL是有很多不如意的地方,如果都用Delphi来开发的话,当然BPL是首先。如果要同其它语言一起来开发,可能还是要DLL。因为其它语言(MS)的不可能也带包。 |
nihaoqiang
9120
|
2004/11/4 20:33:22 |
同意tintin1943的看法,我也是用bpl的方式将程序做成许多可选插件,将公共变量,公共函数,公共类放在一个BPL包里,其他BPL只要引用该包即可随意引用这些变量函数!使用和调试都跟在一个统一的EXE程序里编程没什么两样!还可以访问到application及screen等其他系统关键对象,从而几乎可以访问到你想要访问的所有东西!
可以这么说,BPL的方式是最完美的一种共享方式,我想不出还能有什么比这种方式更完美的方式!使用VC或别的语言就不可能做到这种方式,这是Delhi的独特方式,是伟大的 Delphi的开发者们创造的奇迹!
|
cmh
8696
|
2004/9/25 16:07:07 |
这个我没有做成功,楼主能不能做一个例子出来, |
squall_lee
8055
|
2004/8/26 12:10:55 |
我做项目也有几年了 还是一直只用一个exe, dll,bpl都还没有用过(当然项目不是很庞大...) 感觉小项目还好,如果大项目恐怕就... 所以,还要向大家多多学习 像楼主致敬! |
upp
7861
|
2004/8/17 11:15:03 |
delphi的bpl是可以选择编译的,不必要把第三方控件和delphi自身的bpl一同发布的。那些bpl可以编译到exe文件中,而自定义的bpl可以按照runtime的方式链接到exe里面,这些链接的bpl才需要发布的。 |
tintin1943
7838
|
2004/8/16 17:33:12 |
我一直在用BPL方式开发多模块系统,各个模块以BPL存在。BPL是存在版本问题和发布时候BPL文件过多,但总的来说,BPL还是比DLL优越得多: 1.BPL可以共享一个DataModule连接。 2.BPL在编程设计上可以OOP方式开发,窗口和类都可以继承、封装。 3.BPL调试比DLL方便,DLL出现的一些异常莫名其妙。 4.已BPL方式开发,Exe文件一般在几十K到100多K之间。而子模块的BPL文件,也很小 不过还要发布第三方控件的BPL,delphi自身的BPL。 5.最关键的是,以BPL方式开发的程序,程序初始化调用比DLL要快得多。 |
hotyei
7344
|
2004/7/30 13:29:02 |
Dll和BPL之间各有各的好处,因为BPL存在的个版本的问题。不过BPL是DLL的改进版,总的来说是占优的。 |
dinkysoft
7332
|
2004/7/30 9:03:21 |
我对bpl没有什么研究。不过我认为在Delphi里做DLL不如用BPL。没有这么多麻烦的东东出现。不过发布时要发布一大堆包。也是很麻烦. |
traveller
7310
|
2004/7/29 15:55:45 |
不是的,如果是用bpl,那么他这段代码将反而是无法工作的,因为在bpl中Application指向的就是Exe的Application,而且用bpl就完全不必采用这么麻烦的共享方式了——在bpl中所有全局变量都是和EXE共享的。 |
dinkysoft
7309
|
2004/7/29 15:48:37 |
是不是sephil的带包编译的,所以Application都是同一个共享的 |
hotyei
7248
|
2004/7/28 17:02:39 |
traveller 说的有点印象,好像是 DLL 里面有自己的 Application,除非在 LoadLibrary 后手动修改了(基本上会改)。 |
sephil
7244
|
2004/7/28 16:44:44 |
说实话,这个问题我还真没刻意研究过 我的这个用法也不是我自己创造出来的,是向老外学来的 至于Application.Handle,我自然知道什么意思 不过还是要谢谢traveller |
traveller
7240
|
2004/7/28 15:20:36 |
那样的代码用到什么时候也不会出问题,但却是错的。 |
sephil
7236
|
2004/7/28 14:26:04 |
好吧,就算我凑巧吧 不过更凑巧的是我一直这样用,也从来没出过什么问题 |
traveller
7231
|
2004/7/28 12:53:00 |
这个当然不用争论,因为你的推断确实是错误的,你能够取到其实只是凑巧而已:
DLL中的Application默认是没有窗口句柄的,也就是0,而GetProcAddress的第一个参数如果传0的话它会去在所属的EXE模块中查找。 如果说等价代码,那么其实可以简化为: @GetCurUserName := GetProcAddress(0, 'CurUserName');
你可以自己跟踪一下Application.Handle的值或者查一下Delphi的帮助或者看一下VCL的源码就知道其Handle的含义了。 |
sephil
7229
|
2004/7/28 12:32:40 |
我想这个东西根本不用争论 你回去试试再来评论我是否错了 |
traveller
7221
|
2004/7/28 10:15:15 |
sephil你的下面的推断是错误的:
@GetCurUserName := GetProcAddress(GetModuleHandle(pchar(application.Exename)), 'CurUserName'); 可以简化为 @GetCurUserName := GetProcAddress(Application.Handle, 'CurUserName');
Application.Handle应该是Application的“窗口句柄”,而不是模块句柄,两者是有本质区别的。 |