首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 软件开发 → Delphi编程 → 文章内容

Delphi3.0中的函数调用模式

作者:佚名  来源:网上收集  发布时间:2005-12-10 0:21:45
 
在用Delphi30开发软件时,出现了硬件驱动程序 (DLL)中的函数和过程不能正常调用的问题,该硬件由英国Schlumberger公司生产,驱动程序用汇编语言编写的。其《编程指南》给出的 Microsoft C的示范程序均能正常运行。但运行此软件时现出的错误提示为:  Access violation at address ×××××××× in module……   经仔细分析,才发现问题出现在函数调用模式上。
  
Delphi30支持五种调用模式:register、cdec l、pascal、stdcall和safecall。根据调用模式的不同,参数可以通过CPU的寄存器或堆栈传递给函数和过程。reg ister模式使用CPU的三个寄存器传递参数,而其它模式则用堆栈来传递参数。在register和pascal模式下从左至右传递参数,即参数表中最左边的参数最先被求值并传递,而最右边的参数最后求值并传递。另三种模式cdecl、std call和safecall则从右至左传递参数。这些模式中除了cd ecl外,都是由过程和函数在返回时清除堆栈中的参数,而对于 cdecl模式,需由调用者在调用结束时清除堆栈中的参数。
  如何选择调用模式,有以下三条规则:
  1
Delphi30使用register模式作为缺省调用模式以提高运行效率。
  2如果有调用关系的几个模块是用不同语言编写的,其接口应使用 stdcall模式。
  3如果要实现双界面函数和过程,应使用safec all模式。
  所以解决我们的问题只要选用stdcall模式即可, Schlumberger公司的《编程指南》上在Microsoft C环境下的 DLL函数说明(仅举两例)为:
  void(FAR PASCAL *Imp_ Connect)(unsigned s hort far*,short far*);
  void(FAR PASCAL *Imp_ Init)(short far*,short far*);
  相应的在
Delphi30下DLL函数引入说明为:
  procedure Imp_ Connect(var CardAddress:wor d;var CardHandle:smallint);stdcall;
  procedure Imp_ Init(var Poll_Tab:smallint;var ErrorFlag:smallint;var CardHandle:smallint);stdcall;
  这样修改以后,程序即可正常运行(原来我们没有说明调用模式,即使用缺省的 register模式),由此我们也可得出一个经验:对一些高版本的新软件,使用时要注意改进和扩充,并经常看看帮助文件,定会大有裨益。 

[] [返回上一页] [打 印]
  • 上一篇文章:DCU文件(编译的库单元)的重用
  • 下一篇文章:Delphi 4增订的Object Pascal

  • 相关文章:
  • [图文]利用Delphi编制IP地址转换器
  • 简析XML及其在Delphi中的应用
  • Delphi模拟最小化恢复关闭按纽
  • Delphi实现远程串口的数据采集
  • [图文]Delphi开发基于DCOM的聊天室
  • 在Delphi中使用电子邮件
  • Delphi托盘编程实战演练
  • Delphi实现同类型文档自动合并
  • Delphi开发98屏幕保护预览程序
  • [图文]Delphi 8 For .NET 抢先预览
  • [图文]用Delphi实现动态获取版本信息
  • Delphi图像存取另类解决方案
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号