请大家谈谈DELPHI的好处 (50分)

  • 主题发起人 cyf_00002
  • 开始时间
C

cyf_00002

Unregistered / Unconfirmed
GUEST, unregistred user!
我用了一年的VB用了半年DELPHI(菜鸟级别)
总感觉DELPHI在处理某些问题上比VB要慢很多 例如 ADO连接ACCESS 自己感觉DELPHI好象要比VB
慢2-3倍
在处理低层技术上,DELPHI好象不如VC,当然比VB要强多了(想说一句,在VB的功能也很强大
除了不能用系统钩子,少了很多的诱惑力),而且DELPHI的代码很麻烦,一个字就是多。
请大家谈谈DELPHI的好处,坚定我对DELPHI的信心,要不然的话,可能要啃VC了。
 
再多用半年看看吧
众多的第三方控件,灵活的处理机制,强大的功能都是优点啊
 
1 正版的也便宜,适合中国国情
2 简单易学,开发效率高(和VC比)
3 功能强大,没有专业水平也可以开发出专业程序
 
一直用它,直到你认为他比一切编程工具都好为止。
到那时你在评价他
 
1。DELPHI控件多 方便
2。DELPHI要比VC好学
3。DELPHI不象VB那样依赖系统 微软的东西与WINDOWS兼容性比别东东的好
当然DELPHI没有VC功能强 没有绝对的好与坏
只是要看你的水平还有你想在什么地方发展
学好了VC用的地方比较多而DELPHI至少是东北没多少单位要
 
"在处理低层技术上,DELPHI好象不如VC"
那是觉得不正确地~~~~除了VXD程序,delphi都能写,
不过除了VC能写VXD,别的语言都不能写,为什么呢?
MS搞的鬼了,所以不是delphi不能写VXD,而是MS不让
你写。
delphi全面支持API,使用起来和VC一样方便。
所以,delphi至少和VC一样好!
 
只有有些人说delphi对OO支持的不好的什么了,都是胡扯
面向对象是人的思想,你连基本的思想都没有,用什么工具
都是白扯,就是用VC写的也是面向过程的程序。
至于说框架,你完全可以自己建立么,delphi没有阻止你建立
更好的框架。
 
我想对楼主说说VB的坏处:
1、在开发环境中运行时,若出现死循环等原因不能结束运行时,你只能结束任务,然后你那些没有保存的代码全完了。
2、一个没有记录的数据集,运行MoveFirst会出错,而对数据集更多的用法是:
ds.First//如果是VB,这里可能会出错
while not ds.Eof do
begin
end
3、Left('abc',0)会出现程序错误,我觉得不应该出错,只是返回空字符串。
4、写注册表、写INI,烦!!!
5、程序打包,带那么多的东东,烦!
6、一个绑定的字段,不会自动锁定类型、长度
7、一般情况不需要类型匹配,但作参数传递时要。
8、调用存储过程时,如果存储过程中有Insert语句,将不能返回数据集(Delphi可以)
9、....懒得写了
 
VB还有几个让人头痛的的方
1>程序的执行的顺序性不好
2>调用API还要申明一大堆
3>不能真的面向对象
4>数据库应用只能用原生ADO
还有开发效率比起Delphi来说满多了!
 
我再补充一下感觉VB里面不爽的地方
1.底层逻辑运算,包括逻辑位运算和移位运算都不太方便
2.我定义了一个长整型数据, 赋值 &hffff,他竟然把它当作 &hffffffff,太傻了
改成36535方才作罢
3.竟然去判断整数运算的溢出,害得我想办法来模拟移位运算
4.一些对象的属性和方法很不好用,没有Delphi的方便
5.发布程序要很多的DLl或者OCX,并且还需要进行注册,太麻烦
 
>>在处理低层技术上,DELPHI好象不如VC
to 楼主
你能举个例子吗? 当然编译驱动程序除外,
Delphi语言所提供的机制,也就是说C语言能做到的,他都能做到
楼主的观点符合大众的观点,但却是错误的
不知道楼主所指的底层是什么??
 
好处多多,使用方便。适合像我这种比较懒的人
 
我靠,谁说Delphi不能写VXD????????????????????
用Delphi编写VxD设备驱动程序
  前言
  用 delphi 3.0 编写 vxd 设备驱动程序,在delphi 3 下编译通过,delphi 2 下没有测试,delphi 4 建立的 object 文件 m$ linker 5.12.8181 不能识别,这里使用的汇编器是m$的macro assembler ver. 6.11d ,联结器是m$ incremental linker ver. 5.12.8181 ,它们来自 windows 98ddk(http://www.microsoft.com/ddk/ddk98.htm)。
  介绍
 windows 存在有两种类型的 vxd 设备驱动程序:
  1、静态(static) vxd ,装入操作系统并永久的存在于内存中;
  2、动态(dynamic) vxd,当需要时才调入内存,用完后关闭vxd即可释放内存。
  inprise delphi 有能力建立任何一种类型的 vxd 设备驱动程序,下面我们将介绍如何建立动态 vxd。
  当 win32 应用程序打开一个 vxd “虚拟”设备时,vwin32 使用 loaddevice 将 vxd 装入内存,并建立消息w32_deviceiocontrol ,发向 vxd。
  也就是说,vxd 至少应该响应以下两个系统信息和编写以下的一个函数:
  sys_dynamic_device_init
  sys_dynamic_device_exit
  w32_deviceiocontrol 函数.
  消息 sys_dynamic_device_init 在尝试装入 vxd 时发送到 vxd ,消息 sys_dynamic_device_exit 在尝试动态交换时发送到 vxd ,消息的处理者在成功处理后,应该在寄存器 ax 中返回 vxd_success 标志。
  w32_deviceiocontrol 的 dwservice 参数有以下的值:
  dioc_open 当 vxd 通过 createfile() 函数尝试打开操作时发送(在 sys_dynamic_device_init 消息后),如果成功返回 no_error (0); 
  dioc_closehandle 当 vxd 通过 closehandle() 函数尝试关闭操作时发送(在 sys_dynamic_device_exit 前)
  所有其它的值 > 0 意味着不同的函数调用(由 dwiocontrolcode 给出),当 vxd 被 deviceiocontrol 函数调用时。
启动模块(vxdmain.asm)
...
extrn sysdynamicdeviceinit :proc
extrn sysdynamicdeviceexit :proc
extrn w32deviceiocontrol  :proc
...
            public delphiio_ddb
      public @@handlefinally
      public @initialization
...
control_0  proc
  cmp  eax, sys_dynamic_device_init
  jnz  short chksysdynexit
  call  sysdynamicdeviceinit
  cmp  eax, 1
  retn  
;-------------
chksysdynexit:
  cmp  eax, sys_dynamic_device_exit
  jnz  short chkdevioctl
  call  sysdynamicdeviceexit
  cmp  eax, 1
  retn  
;-------------
chkdevioctl:
  cmp  eax, w32_deviceiocontrol
  jnz  short loc_ret
  push  esi
  push  edx
  push  ebx
  push  ecx
  call  w32deviceiocontrol
  cmp  eax, 1
  retn  
;-------------
loc_ret:
  clc  
  retn  
control_0  endp
@@handlefinally:
@initialization:
      ret
_ltext  ends
            end

  delphi 会为单元的 initialization/finalization 建立代码调用外部过程 handlefinaly 和 initialization ,即使 initialization/finalization 在单元中不存在。因此我们在汇编的启动文件中建立空的外部过程入口。
  主 delphi 程序单元(vxdprocs.pas) 

...
procedure shellmessage(handle, flags : integer;
const message, caption : pchar; 
  callback, referencedata : pointer);
stdcall;
assembler;
asm
 mov  ebx, handle    // virtual machine handle
 mov  eax, flags    // message box flags
 mov  ecx, message    // address of message text
 mov  edi, caption    // address of caption text
 mov  esi, callback    // address of callback
 mov  edx, referencedata    // reference data for callback
 int  20h      // vxdcall
 dd   170004h      // shell_message
end;

function sysdynamicdeviceinit : integer;
begin

 shellmessage(0, $10, copyright, ’sysdyninit: hello from delphi vxd !!!’, nil, nil);
 result := vxd_success;
end;

function sysdynamicdeviceexit : integer;
begin

 shellmessage(0, $10, copyright, ’sysdyndevexit: bye from delphi vxd !!!’, nil, nil);
 result := vxd_success;
end;

function w32deviceiocontrol(dwservice : integer;
              dwddb : integer;
              hdevice : integer;
              lpdiocparms : pointer) : integer;
begin

 shellmessage(0, $10, copyright, ’w32devioctl’, nil, nil);

 if (dwservice = dioc_open) then

 begin

   result := no_error;
 end
 else
if (dwservice = dioc_closehandle) then

 begin

   result := vxd_success;
 end
 else
if (dwservice > max_pasvxd_w32_api) then

 begin

   result := error_not_supported;
 end
  else

 begin

   result := vxd_success; 
 end;

end;

...

  [译者:好了,简单的 vxd 设备驱动程序编写完毕了。你可以将它当作一个写 vxd 设备驱动程序的模板。]
  附一:make.bat

d:/visual~1/98ddk/bin/win98/ml -coff -dbld_coff -dis_32 -w2 -c -cx -zm -dmasm6 vxdmain.asm
call dcc3.bat -j vxdprocs.pas
d:/visual~1/98ddk/bin/link /def:vxddef.def /vxd vxdmain.obj vxdprocs /out:delphiio.vxd
  附二:
  现在让我们来编写对该 vxd 的测试程序,两个按钮:一个打开 vxd;一个关闭 vxd。
const
vxdname = ’//./delphiio.vxd’;

...
function tvxdtestform.openvxddriver: boolean;
begin

hvxdhandle := createfile(vxdname,0,0,nil,0,file_flag_delete_on_close,0);
result := hvxdhandle <> invalid_handle_value;
end;

procedure tvxdtestform.closevxddriver;
begin

if hvxdhandle <> invalid_handle_value then
begin

  closehandle(hvxdhandle);
  hvxdhandle := invalid_handle_value;
end;

end


  顺便说一下,delphi中有个编译选项可以控制程序加载的入口
  一般是0x00400000,你可以改。

 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=851520
 
谁说 Delphi 效率不如 C
我说用 Delphi 照样能写高效率游戏
Age Of Wonders 就是用 Delphi 写的
Quake 2 Delphi 引擎马上就会转完了
系统编成应有尽有,上面几位朋友说的很清楚, 网络编程可以写 ASP OCX , Active X 和 CGI
会 Delphi 就会一切
(附记,我会汇编,VB,VC,VS.net,C#,JAVA(JSP),Delphi,十年编程经验)
 
呵呵
Delphi的好自然不用讲,不过它的缺点也确实很多。
Delphi在大多数情况下被当作数据库编程最佳工具,很多Delphi程序员都在利用Delphi在
发数据库的财,呵呵,这方面delphi确实给各位兄弟赚足了口袋,争足了面子!
但是在其他开发方面delphi的弱点就暴露无遗!
首先各种SDK都是针对C++的,从多媒体到网络,C++的头文件、Demo、Document到处都是,
而Delphi程序员必须等待像jedi这种类似慈善机构的组织来翻译,有些高手自己动手转化
一些,但是已经做了很多无用功!
无法开发驱动也是Delphi的心病,从VXD到WDM,C语言一路高歌,很多大富翁的贴子提及了
文件过滤、隐藏进程、Hook Api、防火墙就无法进行下去,想拿高薪必须要抛弃Delphi!
没有详细的帮助又是Delphi的软肋,MSDN这个超级宝库无疑为C++ VS Delphi添加了巨大的
筹码!
各种论文大多数用C语言作为标准,从图像识别到数据挖掘,想深入进去,Delphi无法帮助你!
全世界最著名的重量级软件几乎全部为VC开发,VC开发的程序经受了众多的考验,为VC赢得
了口碑,但是Delphi在这方面还很薄弱,只有在共享软件领域,delphi才放出异彩!
都是个人见解,大家不要扔鸡蛋,Delphi永远都是各位的最爱!
 
MSDN是程序员必备,当然也包括Delphi程序员
最爱都不一定,在这一点上大家不必太专一,可以看到好的就上,不用客气
如果一个Delphi程序员根本不懂C或者C++也不是一个好的程序员,
因为他看不懂针对C语言的各种文档和开发资料
说到Delphi不好的地方,我可是深有体会,有时候对VCL中的某些设计很是不理解,
很多自带的控件也编的很有问题,虽然VCL类库封装的很容易使用,但是却很死板
很难修改,一些界面控件的细节让我不能忍受,
另外,BDE难于安装和分发,ADO速度慢,还有毛病
ListView的操作数据远远小于VC中的ListView
刚出来的SQL Server driver for dbexpress 毛病多多
虽然控件资源的丰富和多种化,使得有了更大的选择空间,但是找一个合适的却也不容易
很多报表组件存在中文兼容的问题,不方便中国的程序员使用
组件资源很多,但是国内的却不多,我们都是拿来主义,这和中国的软件发展环境有关
当然,当今的体制制度,中国人的消费生活观念都不适合这些东西的发展
可以说,他们不适合中国的国情,但是中国人却很需要它
 
我先学了VB,后来改成DELPHI了,觉得后者方便多了。
 
至少用起來得心應手
 
顶部