首页
|
空间
|
新闻
|
论坛
|
博客
|
下载
|
读书
|
网摘
|
视频
|
书店
|
程序员
|
求职招聘
|
项目交易
|
培训
|
网址
欢迎您:
游客
|
退出
|
登录
注册
|
帮助
CSDN
-
CSDN社区
-
VB
-
控件
管理菜单
置顶
推荐
取消推荐
锁定
解锁
移动
编辑
删除
帖子加分
生成帖子
结 贴
发 帖
回 复
收藏
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
关于类封装的问题,顺便散分!
[问题点数:
300
分
,结帖人:Sandrer
]
Sandrer
(焯)
等 级:
结帖率:
98.04%
楼主
发表于:2008-05-26 17:42:03
我在程序里做了几个类,都是基于Comctl32.dll的,即通用控件类。
我这几天一直在考虑,究竟是把类封装在另一个DLL里好呢,还是直接封装在程序里头好。
如果封装在程序里头,有些公共类型不能直接写在类里,非得要写到模块中,搞得代码好混乱,特别是模块中的代码,特别长,看着眼花~
如果另外封装成一个DLL的话,又多出个文件,而且还要注册,有点麻烦。
究竟如何选择,请高人说明一下,最好带原理~~~~
注:程序是给公司里用的,并不是什么绿色软件。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
回复次数:
42
Sandrer
(焯)
等 级:
#1楼 得分:0
回复于:2008-05-26 17:42:48
嘿,明天把分数+到300!!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#2楼 得分:0
回复于:2008-05-26 17:43:07
原来我还有1500多分没散~~~~~~~~
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
dbcontrols
(泰山)
等 级:
2
2
#3楼 得分:10
回复于:2008-05-26 17:43:25
1
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
alifriend
(波导终结者)
等 级:
#4楼 得分:20
回复于:2008-05-26 17:45:39
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
dbcontrols
(泰山)
等 级:
2
2
#5楼 得分:30
回复于:2008-05-26 17:53:03
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
yangao
(沉默の羔羊)
等 级:
#6楼 得分:10
回复于:2008-05-26 18:42:23
基于三层的考虑
封装成DLL是比较好的
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Chen8013
(举杯邀明月)
等 级:
#7楼 得分:10
回复于:2008-05-26 18:46:45
纯粹接分....
我的想法和四楼差不多。
^_^
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
myhongye
(加強身體鍛煉,養成好的生活習慣)
等 级:
#8楼 得分:10
回复于:2008-05-26 19:14:15
公司用,做成DLL好點,不必每次都打包那麼大的文件
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SilenceNet
(SilenceNet)
等 级:
#9楼 得分:10
回复于:2008-05-26 19:20:30
一朋友说
给公司用的。。组件越多显得越专业/工程越大 - -!
不知是否有道理
我现在较喜欢封装。。
全装Exe一起的话。。工程文件显乱。。
噢!~
接分!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#10楼 得分:30
回复于:2008-05-27 00:52:08
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#11楼 得分:0
回复于:2008-05-27 03:05:02
我提问题的那个图片,其实就是最终的程序。
没有任何一个窗体文件,程序中所有的窗体都是在模块中自定义类生成(不再是VB默认的“Thunderxxxxxx”类名了)
图片、图标、字符串、菜单、对话框一齐做成了一个资源DLL,在程序中的模块里调用。
其它控件也是通过调用类中的Create函数生成(Create函数中调用了CreateWindowEx函数。ImageList除外,它并不是一个窗体)。
所以我才说模块里的代码很混乱~~~~~~~~~其实也不是混乱,只是行数比较多,找的时候麻烦。
光一个mdlMain模块就193KB了。
说到这,我又想多问个问题。
[color=#FF0000]在VB中,使用一个200KB的模块好,还是使用4个50KB的模块好(或者5个40KB、10个20KB……)????[/color]
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#12楼 得分:0
回复于:2008-05-27 03:06:21
看在有这么多技术分,帮帮忙,多回答些问题吧~~~~~~~
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#13楼 得分:0
回复于:2008-05-27 03:08:11
附带提一下,我11楼的问题,主要是考虑程序运行的效率、资源占用率!代码管理的方便性暂不考虑!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#14楼 得分:0
回复于:2008-05-27 03:10:24
引用 5 楼 dbcontrols 的回复:
需要经过大量的测试后没有任何毛病的的才可以封装成DLL
封装成DLL后Exe会变小,Dll不驻留内存,只在调用的时候才使用一下,EXE驻留内存,所以封装要好些
问题是,我这几个类都是一直用到程序结束的~~~~~
所以封装成DLL的话,那这个DLL也就是一直驻留内存~
这样的话1个DLL+1个EXE,开销肯定比一个EXE要大!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#15楼 得分:0
回复于:2008-05-27 03:11:29
引用 6 楼 yangao 的回复:
基于三层的考虑
封装成DLL是比较好的
不懂什么是三层~~~~能否解释解释!!!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#16楼 得分:0
回复于:2008-05-27 03:12:21
引用 7 楼 Chen8013 的回复:
纯粹接分....
我的想法和四楼差不多。
^_^
本来不想给你分,不过看在你打这么多字的份上,姑且送你0.1分!^_^
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#17楼 得分:0
回复于:2008-05-27 03:13:54
引用 8 楼 myhongye 的回复:
公司用,做成DLL好點,不必每次都打包那麼大的文件
如果打包的话,难道这个DLL就不打包进去嘛。。。。。。。。
况且,1个EXE肯定要比1个DLL+1个EXE的要小,VB的编译过程,文件大小不敢恭维~~~
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#18楼 得分:0
回复于:2008-05-27 03:15:02
引用 4 楼 alifriend 的回复:
如果只是公司用的话,只要用起来没什么问题,怎么做方便就怎么样吧,但如果要到别处用的话,组件尽量少吧。
引用 9 楼 SilenceNet 的回复:
一朋友说
给公司用的。。组件越多显得越专业/工程越大 - -!
不知是否有道理
我现在较喜欢封装。。
全装Exe一起的话。。工程文件显乱。。
噢!~
接分!
这个嘛~~~~~~~~~~~~~~~~~~~~~~~~~~~考虑考虑!!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#19楼 得分:0
回复于:2008-05-27 03:16:16
引用 10 楼 SupermanKing 的回复:
说道封装类我倒是有点经验,因为自己经常也封装点东西。
其实在类里必须要用到模块的基本上就是钩子程序。
把主要的代码返回类去处理,相信代码也不会很多很乱呀。
钩子就是接几个主要信息,也没几行代码的,只要会把东西返回给类去处理。
这样代码干净整洁,是很不错的方法。
通常只要是钩子程序都有窗口,我研究过系统盒处理和CSocketMaster的范例
里的钩子返回类处理的方法,发现都不是很理想,所以就自己想出了一…
能不能给个简单的例子“烟酒研究”??(边抽烟喝酒边研究)
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#20楼 得分:0
回复于:2008-05-27 03:17:50
好累啊~~~~~~~~~~~~半夜飘完,准备上床!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#21楼 得分:30
回复于:2008-05-27 05:34:38
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#22楼 得分:30
回复于:2008-05-27 06:03:38
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#23楼 得分:30
回复于:2008-05-27 06:08:21
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#24楼 得分:10
回复于:2008-05-27 06:22:16
如果你真的关心效率,这些都做到了那就是API的使用了。
还有比如复制文件我会定义一个8K-15K的字节数组来一段一段的
读写,经过测试比Windows的复制要快,还有进度,内存大了或小
了速度都不同,内存大也不一定快,小了也不见得有效率。
还有使用完数组要记得用Erase清楚,还有使用完对象要注意
Set Obj=Nothing
注意避免浮点运算,VB的浮点运算效率很差的。
使用完GDI要记得DeleteDC之类的。
编译的时候注意编译条件
如果这些都注意了,代码效率应该很高了。但是如果真的感觉
效率不够的话,建议使用VC来开发。
就比如有些图像的运算,每秒处理30张图像,自己另类算法。
最好用VC开发DLL处理。或者说有大量的浮点运算过程,也可
以较给VC。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#25楼 得分:0
回复于:2008-05-27 07:47:47
Oh my god !!!
你是没睡觉呢,还是太早起床?
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#26楼 得分:0
回复于:2008-05-27 07:55:07
引用 21 楼 SupermanKing 的回复:
你看过CSocketMaster的类代码吗?
里面就是用API创建的窗口来接系统信息的。
但无论是怎么创建的窗口,都可以用钩子钩住函数地址来处理的呀。
即使你用VB的对话框窗口要钩住他来取系统信息也没问题的呀。
反正要用到的就是个接信息用的句柄而已,API创建的和VB的都可以用。
主要是类和模块的接口,在模块中得到类对象这块才是关键。方法我见过两种。
自己搞了一种。
第一种,就是VB5的时候自带的范例,是操作系统盒…
这个子类化的方法有点类似我之前写的一个,只不过你是把消息处理函数写在类中,而我是写在窗体中。
请参见:
第37楼的代码
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#27楼 得分:0
回复于:2008-05-27 08:11:20
引用 24 楼 SupermanKing 的回复:
如果你真的关心效率,这些都做到了那就是API的使用了。
还有比如复制文件我会定义一个8K-15K的字节数组来一段一段的
读写,经过测试比Windows的复制要快,还有进度,内存大了或小
了速度都不同,内存大也不一定快,小了也不见得有效率。
还有使用完数组要记得用Erase清楚,还有使用完对象要注意
Set Obj=Nothing
注意避免浮点运算,VB的浮点运算效率很差的。
使用完GDI要记得DeleteDC之类的。
编译的时候注意编译…
类里基本全是API~~~~~~
你22楼的文章很早就已经看过了,最后几点看得我感觉有点混乱了~~~~~
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#28楼 得分:10
回复于:2008-05-27 08:12:31
我没睡,呵呵,经常的,通常都是睡4-6个小时,有的时候
2个小时,更夸张的是4天都在搞电脑,没睡过,也睡不着,
精神亢奋,呵呵
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#29楼 得分:0
回复于:2008-05-27 08:17:42
嘿,我昨晚睡了3个小时~
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
CathySun118
(斯年)
等 级:
2
更多勋章
#30楼 得分:10
回复于:2008-05-27 09:00:15
封装到dll比较好,方便重用
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
vansoft
(Vansoft Workroo)
等 级:
#31楼 得分:10
回复于:2008-05-27 09:16:39
学习,向各位学习.
顺便接点分.
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
m60a1
(努力中.....)
等 级:
#32楼 得分:10
回复于:2008-05-27 09:24:19
引用楼主 Sandrer 的帖子:
我在程序里做了几个类,都是基于Comctl32.dll的,即通用控件类。
我这几天一直在考虑,究竟是把类封装在另一个DLL里好呢,还是直接封装在程序里头好。
如果封装在程序里头,有些公共类型不能直接写在类里,非得要写到模块中,搞得代码好混乱,特别是模块中的代码,特别长,看着眼花~
如果另外封装成一个DLL的话,又多出个文件,而且还要注册,有点麻烦。
究竟如何选择,请高人说明一下,最好带原理~~~~
注:程…
对于COM来讲,如果是进程内的那么运行速度当然比进程外的要快,
但进程外的会比进程内的好管理,至于注册的话这又不是问题,您
的软件又不是绿色软件,选个好点的打包软件不就OK了,LZ还是多
方面考虑下
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
m60a1
(努力中.....)
等 级:
#33楼 得分:10
回复于:2008-05-27 09:32:44
引用 24 楼 SupermanKing 的回复:
如果你真的关心效率,这些都做到了那就是API的使用了。
还有比如复制文件我会定义一个8K-15K的字节数组来一段一段的
读写,经过测试比Windows的复制要快,还有进度,内存大了或小
了速度都不同,内存大也不一定快,小了也不见得有效率。
还有使用完数组要记得用Erase清楚,还有使用完对象要注意
Set Obj=Nothing
注意避免浮点运算,VB的浮点运算效率很差的。
使用完GDI要记得DeleteDC之类的。
编译的时候注意编译…
如果抛开其它语言不管,只从VB角度来讲,不是用API就一定会比内置的函数来得快
要知道加载API本来就需要开避额外的空间。当然了在处理图形方面使用API会比内
置函数来得快许多,但除了这块之外,并不一定使用API就一定有效率。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#34楼 得分:0
回复于:2008-05-27 10:44:40
引用 33 楼 m60a1 的回复:
引用 24 楼 SupermanKing 的回复:
如果你真的关心效率,这些都做到了那就是API的使用了。
还有比如复制文件我会定义一个8K-15K的字节数组来一段一段的
读写,经过测试比Windows的复制要快,还有进度,内存大了或小
了速度都不同,内存大也不一定快,小了也不见得有效率。
还有使用完数组要记得用Erase清楚,还有使用完对象要注意
Set Obj=Nothing
注意避免浮点运算,VB的浮点运算效率很差的。
使用完GDI要记…
VB的读写文件操作和API的读写文件操作谁会更加快点?
本来VB语言和API冲突的地方就不多,除了几样东西有重复冲突的
外,就没什么可比的了。API有的VB没有,VB有的API没有,要不
就是别人封装的API控件呀类的东西,但就图形和文件这些来对比
,API就是快呀。别的我还真没想过API和VB拿什么来比比看谁快。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
iamxiang
(真心微笑)
等 级:
#35楼 得分:10
回复于:2008-05-27 11:06:20
我是来接分的。
最好封装成DLL,这样会促使你规范DLL的接口,方便程序的再次开发及修改!
至于多一个文件,我想这不是问题吧,反正发布的时候也要自带很多的DLL及OCX的。
另外:看到楼上还有来讲课的,非常佩服!!!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#36楼 得分:0
回复于:2008-05-27 16:23:12
其实我另外做的通用控件类,里面全是用API构建
测试过速度比调用comctl32.ocx里面的控件要慢大概1/4至1/3左右
只不过我是为了增加一些comctl32.ocx里面没有的功能而已~
封装API的另外一个原因,是因为我的程序没有窗体文件,所以不能直接用ocx。
在消息处理方面,比直接调用控件的事件要来得快,基本弥补了比调用comctl32.ocx里面的控件慢的时间
就拿ListView和TreeView来说,普通用Ocx各增加10000条数据,Lv和Tv各用了2.4和1.8秒,用API各用了4.1和2.1秒(Lv共5列、Tv没有子项)。
但如果用虚拟列表的话,Lv和Tv各显示1亿条数据,也只用1秒多点就能显示出来了(因为只处理当前可见项目),这个就非得用API和拦截消息了。
而且因为拦截了消息,可以更全面的操作窗体。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#37楼 得分:0
回复于:2008-05-27 16:24:22
引用 35 楼 iamxiang 的回复:
我是来接分的。
最好封装成DLL,这样会促使你规范DLL的接口,方便程序的再次开发及修改!
至于多一个文件,我想这不是问题吧,反正发布的时候也要自带很多的DLL及OCX的。
另外:看到楼上还有来讲课的,非常佩服!!!
我做的那个程序,全是调用系统自带的DLL来制作的,所以不用另外打包一些DLL文件。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
SupermanKing
(人类)
等 级:
#38楼 得分:0
回复于:2008-05-29 01:28:27
还没结贴呀,你想等什么?
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
myjian
(嗷嗷叫的老马---我郁闷.)
等 级:
2
#39楼 得分:10
回复于:2008-05-29 04:26:17
等我来接分呀~~~~~~~~~~~~~~~~~~~~~嘿嘿
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#40楼 得分:0
回复于:2008-05-29 07:41:30
^_^
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
Sandrer
(焯)
等 级:
#41楼 得分:0
回复于:2008-05-29 07:42:04
昏,早知道就选“非技术类”帖,技术类帖没得平均给分,累死!!!!!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
myhongye
(加強身體鍛煉,養成好的生活習慣)
等 级:
#42楼 得分:0
回复于:2008-05-29 12:36:37
17楼
如果打包的话,难道这个DLL就不打包进去嘛。。。。。。。。
况且,1个EXE肯定要比1个DLL+1个EXE的要小,VB的编译过程,文件大小不敢恭维~~~
如果這個DLL是重複使用,第一次打包安裝之後,以後用就可以不必再打包DLL
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
管理菜单
置顶
推荐
取消推荐
锁定
解锁
移动
编辑
删除
帖子加分
生成帖子
结 贴
发 帖
回 复
相关问题
共享一个很简单的文件(夹)操作的类.顺便散分(逸学堂第五周) C/C++ / 非 ...
主要目的是菜鸟无聊散分,顺便问个不大不小的问题Web 开发/ ASP - CSDN ...
圣诞快乐,散分1000,顺便请教个问题扩充话题/ 灌水乐园- CSDN社区 ...
有分就散,顺便求一份工作扩充话题/ 灌水乐园- CSDN社区community.csdn.net
我是初学,问个简单问题还望各位大侠不吝赐教~~~~关于asp.net项目共用 ...
出点血,散散分。顺便问一下turbo pascal能不能进行Socket编程 ...