首 页
┆
源码下载
┆
IT学院
┆
字体下载
┆
模板下载
┆
源码发布
┆
广告合作
┆
网站地图
┆
虚拟主机
┆
中文域名
►
设为首页
►
加入收藏
►
联系我们
源码下载
>>
ASP源码
|
PHP源码
|
ASP.net源码
|
JSP源码
|
CGI源码
|
VC/C++源码
|
VB源码
|
Delphi源码
|
Flash源码
文章学院
>>
网络编程
|
网页设计
|
图形图象
|
数据库
|
服务器
|
网络媒体
|
网络安全
|
操作系统
|
办公软件
|
软件开发
|
黑客知识
字体下载
>>
精制字体
|
非英字体
|
艺术字体
|
著名字体
|
哥特式
|
简单字体
|
手写体
|
节假日
|
图案字体
|
精度像素
|
中文字体
模板下载
>>
企业门户
|
数码网络
|
休闲娱乐
|
影视音乐
|
旅游名胜
|
文化艺术
|
电子商务
|
个性展示
|
登陆导航
|
Flash模板
源码搜索
文章搜索
字体搜索
模板搜索
►►
您当前的位置:
源码园
→
IT学院
→
软件开发
→
Delphi编程
→ 文章内容
Delphi3.0中的函数调用模式
作者:佚名 来源:网上收集 发布时间:2005-12-10 0:21:45
在用
Delphi30开发软件时,出现了硬件驱动程序 (DLL)中的函数和过程不能正常调用的问题,该硬件由英国Schlumberger公司生产,驱动程序用汇编语言编写的。其《编程指南》给出的 Microsoft C的示范程序均能正常运行。但运行此软件时现出的错误提示为: Access violation at address ×××××××× in module…… 经仔细分析,才发现问题出现在函数调用模式上。
Delphi30支持五种调用模式:register、cdec l、pascal、stdcall和safecall。根据调用模式的不同,参数可以通过CPU的寄存器或堆栈传递给函数和过程。reg ister模式使用CPU的三个寄存器传递参数,而其它模式则用堆栈来传递参数。在register和pascal模式下从左至右传递参数,即参数表中最左边的参数最先被求值并传递,而最右边的参数最后求值并传递。另三种模式cdecl、std call和safecall则从右至左传递参数。这些模式中除了cd ecl外,都是由过程和函数在返回时清除堆栈中的参数,而对于 cdecl模式,需由调用者在调用结束时清除堆栈中的参数。
如何选择调用模式,有以下三条规则:
1
Delphi30使用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*);
相应的在
Delphi30下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号