delphi加载c语言dll文件,在Delphi编程中使用C语言代码 - 调用C语言编写的DLL文件(3页)-原创力文档...

1、 使用Visual C++ 6.0编写和链接DLL

打开Visual C++ 6.0集成开发环境,新建一个Win32 Dynamic-Link Library类型的工程CDLL,在工程中新建一个C语言源文件cdll.c。源文件中的内容如下:

__declspec(dllexport) int max(int x,int y) /* 比较两个整型变量大小的函数max */

{

???if (x>y)

??????return x;

??? else

??????return y;

}

输入完毕后按下F7键来编译和链接CDLL.dll,之后可以在存放该工程的文件夹的Debug子文件夹中找到一个名为CDLL的DLL文件,该文件即以上的C语言源程序生成的DLL。

2、 使用Delphi 7编写调用该DLL的应用程序

打开Delphi 7集成开发环境,在默认生成的窗体Form1上拖放3个Edit控件Edit1、Edit2、Edit3和1个Button控件Button1,并在Object Inspector中将3个Edit控件的Text属性都清空。然后在默认生成的Unit1.pas文件的implementation后输入:

function max(x,y: Integer): Integer; stdcall external 'CDLL.DLL';

返回Form1,双击Button1控件,在生成的事件处理程序中输入:

Edit3.Text:=IntToStr(max(StrToInt(Edit1.Text), StrToInt(Edit2.Text)));

输入完毕后,保存这个Project。最后,将CDLL.dll文件copy到保存该Project的文件夹中。

3、 测试

在Delphi集成开发环境下,按下F9来运行刚刚编写的Project。在Edit1中输入2,Edit2中输入4,然后单击Button1,可以看到Edit3中会出现4,测试成功。

4、基础知识

4.1、回调函数

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。其中回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础。

回调函数与普通函数的申明并无区别,但如果是不同的开发语言之间通过回调函数来传递与处理数据,则一定要注意在不同语言对回调函数的申明与实现时其函数调用约定必须保持一致。

4.2、函数调用约定

声明过程或函数时,可以指定调用约定(calling convention),尤其在以接口形式提供给其它语言工具使用时,则必须指定过程或函数的调用方式。

Delphi指定调用约定可以使用的指示字包括register、pascal、cdecl、stdcall以及safecall。C/C++调用约定有stdcall、cdecl、fastcall、thiscall、naked call等。

决定了传递给例程的参数的顺序,还影响参数从栈中的解除、参数传递时对寄存器的使用以及处理错误和异常等。缺省的调用约定是register。

下表是调用约定的简要概括:

指示字 ...........参数顺序 ................................................参数删除者 寄存器传递参数register ...........从左到右 ...............................................例程 .....................是pascal ............从左到右 ................................................例程 ....................否cdecl ..............从右到左 .................................................调用者 ................否stdcall ............从右到左 .................................................例程 ....................否safecall ..........从右到左 .........................................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值