Delphi中C++的DLL的调用
来源:互联网 发布:电子出口数据 编辑:程序博客网 时间:2024/04/29 13:12
调用DLL有两种方法,一种是在应用程序装载时调用,另一种是在应用程序运行时调用。
(1) 装载时调用DLL
在调用DLL的Pas文件中,对DLL函数进行外部声明,声明应位于Implementation后,形式如下:
Implementation
Function functionname(argment):Boolean;far;External 'DllName';
例如,Function AdvDVP_GetNoOfDevices(pNoOfDevs: PINT):Integer ; stdcall;External 'xxx.dll';xxx为待测的dll名称。
这里有两个问题:第一,参考书上的指针数据类型,type 指针类型名称=:^ type,如
pNoOfDevs: ^Integer是通不过的,必须改为pNoOfDevs: PINT。
第二,如果是通过新建了一个unit来专门声明待测试的所有函数,变量等,则不能只在Implementation声明,否则,编译出现未声明的identifier的error。
要有两部分:
interface uses windows;
Function AdvDVP_InitSDK():Integer ; stdcall;
implementation
function AdvDVP_InitSDK; External 'xxx.dll';//xxx为待测试的dll名称
其中External关键字后面的引号内是DLL的文件名,该文件一般应放在系统的system目录下,或与调用它的项目同一目录。声明以后即可在Pas文件任何地方引用DLL函数。
否则,如果在工程下,直接声明,那么只要implementation下添加下面代码就可以了:
Function AdvDVP_InitSDK():Integer ; stdcall; external 'DVP7010B.dll';
在form中,添加button,并直接调用函数就可以了。
ret := AdvDVP_InitSDK();
装载时调用DLL的优点是速度较快,程序间也可共享代码。
(2) 运行时调用DLL
DLL的另一种调用方法是在运行时调用。这种方法要调用到Windows的API函数LoadLibrary,GetProcAddress,FreeLibrary等。此方法主要用于调用其它语言,特别是C++编译的DLL。
首先在欲调用DLL的程序Type类型声明处加入一句:
type
TAdvDVP_InitSDK=Function:Integer; stdcall;
此句的作用如同C++中声明的函数指针。
然后定义如下变量∶
var
AdvDVP_InitSDK:TAdvDVP_InitSDK;
Handle:THandle;
在调用DLL处加入如下语句进行DLL装载:
begin
Handle:=LoadLibrary('xxx.dll'); //xxx为待测试的dll名称
if Handle<>0 then
begin
@AdvDVP_InitSDK:=GetProcAddress(Handle,'AdvDVP_InitSDK');
end
else
Application.MessageBox('加载dll出错 ', mb_OK);
end;
下面可直接调用DLL了:
var
ret: Integer;
I :Integer;
res:Integer;
begin
ret := AdvDVP_InitSDK();
if ret=1 Then
begin
Application.MessageBox('Initing SDK succeeded.', 'Look', mb_OK);
end;
MessageValue.Text := IntToStr(ret);
end;
调用完以后,用FreeLibrary释放DLL占用的内存:
FreeLibrary(Handle);
- delphi调用c的dll
- 在Delphi中调用C语言编写的DLL
- Delphi 调用C/C++的DLL
- Delphi 调用C/C++的Dll
- Delphi调用C写的dll
- Delphi调用C#dll的问题
- Delphi中C++的DLL的调用
- Java中调用Delphi编写的DLL
- Delphi 中DLL的调用技巧
- delphi中怎么调用vb的DLL
- Delphi中DLL的建立和调用
- Java中调用Delphi编写的DLL
- Delphi中动态调用DLL的方法
- Delphi中动态调用DLL的方法
- Delphi中怎么调用vb的DLL
- Delphi 调用VC的DLL
- .net 调用delphi 的DLL
- C++如何调用delphi制作的dll
- 整数划分问题
- 解决公司屏蔽上qq的方法
- Servlet生命周期
- UNIX/LINUX平台可执行文件格式分析
- asp.net中对文件的创建,移动,复制,及删除操作
- Delphi中C++的DLL的调用
- C++ 虚函数表解析
- NVelocity
- 解决远程连接服务器的最大连接数
- java 序列化 问题
- JavaScript字符串函数大全
- 搜集的一些搜索引擎登陆入口网址的分享
- 软件项目开发典型风险一览
- 如何更改windows2003最大连接数