- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
delphi调用c动态库.
一、概述
Delphi是Borland公司研制的高效的可视化开发工具,它既可用于开发系统软件,也适合于应用软件的开发。随着韩国网络游戏《传奇》的红火,其开发工具delphi也被更多的软件开发人员所熟知;C语言也是目前IT界运用最广泛的开发语言之一。最近由于工作方面的原因,需要提供delphi调用c/c++编写的动态库的例子。在不同的开发语言之间相互调用,除了要熟练掌握各种语言的编写技巧之外,还要了解各种语言对函数的处理机制与调用规则。本文讲述了delphi调用c语言的动态库的例子,其中介绍了一些函数调用方面的基础知识,以及如何将c++中的结构、数组、字符串等数据类型转换为delphi中对应数据类型,还引入了常用的但网络上不常见的一些技术,比如回调函数的定义与注册,并通过实例展示了delphi调用c语言的动态库的细节,供大家在学习开发过程中参考。
开发工具:vc++6.0、delphi7.0
二、基础知识
2.1、回调函数
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。其中回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础。
回调函数与普通函数的申明并无区别,但如果是不同的开发语言之间通过回调函数来传递与处理数据,则一定要注意在不同语言对回调函数的申明与实现时其函数调用约定必须保持一致。
2.2、函数调用约定
声明过程或函数时,可以指定调用约定(calling convention),尤其在以接口形式提供给其它语言工具使用时,则必须指定过程或函数的调用方式。
Delphi指定调用约定可以使用的指示字包括register、pascal、cdecl、stdcall以及safecall。C/C++调用约定有stdcall、cdecl、fastcall、thiscall、naked call等。
决定了传递给例程的参数的顺序,还影响参数从栈中的解除、参数传递时对寄存器的使用以及处理错误和异常等。缺省的调用约定是register。
下表是调用约定的简要概括:
指示字
参数顺序
参数删除者
寄存器传递参数
register
从左到右
例程
是
pascal
从左到右
例程
否
cdecl
从右到左
调用者
否
stdcall
从右到左
例程
否
safecall
从右到左
例程
否
fastcall
函数前两个参数通过ecx和edx传递,其他参数从右向左的顺序压栈
例程
部分是
thiscall
(非关键词)
从右到左
(this指针保存在ecx,仅用于c++)
例程
naked call
一般用于实模式驱动程序设计
-
-
补充说明:
·cdecl调用约定又称为C调用约定,是C语言缺省的调用约定.
·register约定最多可以使用三个CPU寄存器传递参数,而其他的约定都通过栈传递所有的参数。
·safecall约定实现了异常防火墙。在Windows中,这一实现在内部处理COM错误通知。
·缺省的register约定是效率最高的,因为它通常避免了栈中新帧的创建。
·调用来自用C或C++编写的共享库的函数时,cdecl约定是很有用的;而对外部代码的调用,一般而言,推荐使用stdcall和safecall约定。
·在Windows中,操作系统API函数使用的是stdcall和safecall约定。其他操作系统通常使用cdecl约定。(注意,stdcall约定比cdecl约定具有更高的效率。)
·safecall约定必需用于声明双重接口的方法。pascal约定用于维持向后(旧版本)兼容。
三、实例分析
3.1、实例功能概述
动态库功能:C语言开发,修正将某个工友的工号以及薪资,将其工号增加10,薪资增加1000。当然,实际生活中估计不会出现这种情况,这里只是为了展示这种调用技术而假想的例子。
Delphi程序功能:调用动态库,将工友的资料作为入参传入动态库,由动态库对工友资料做相关调整,然后动态库通过回调函数将处理后的数据传给调用程序并在控制台显示出来。
C调用程序功能:与Delphi程序功
您可能关注的文档
- C语言循环和数组训练题..docx
- C语言语言习题4..doc
- c语言重要程序样本..doc
- D-TLD零件管理..doc
- Datetime使用大全,保存这里以后看..doc
- DEH控制系统概述..doc
- dedeCMS常用标签整合..doc
- Delphi常用文档资料之一..doc
- DOSbox详细设置..doc
- DQZDS-JX-02ROTORK电动执行机构检修..docx
- 《JJF 2132-2024荧光紫外灯人工气候老化试验装置校准规范:辐射照度参数》.pdf
- JJF 2120-2024轮速传感器校准规范.pdf
- 计量规程规范 JJF 2120-2024轮速传感器校准规范.pdf
- 《JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数》.pdf
- JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数.pdf
- 《JJF 2120-2024轮速传感器校准规范》.pdf
- JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
- JJF 2116-2024特定蛋白分析仪校准规范.pdf
- 《JJF 2116-2024特定蛋白分析仪校准规范》.pdf
- 计量规程规范 JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
文档评论(0)