捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:主程序与DLL之间的全局变量问题
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的“窗口句柄”,而不是模块句柄,两者是有本质区别的。
第一页 上一页 下一页 最后页 有 38 条纪录 共2页 1 - 20
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表