Delphi调用C++编写的动态链接库dll的方法
2015-11-16 11:48
886 查看
首先我们先看一下普通Delphi调用动态链接库dll的方法:
{===================静态调用DLL函数===================}
//首先声明这个DLL中的函数,然后就可以直接调用了
function AddNum(Num1,Num2:integer):integer;stdcall;external 'project1.dll' name 'AddNumber';
//function AddNum(Num1,Num2:integer):integer;stdcall;external 'Add_Dll_test.dll' name 'AddNumber';
procedure TForm1.Button1Click(Sender: TObject);
var
Num1,Num2:integer;
Sum:integer;
begin
Num1:=StrToInt(Edit1.Text);
Num2:=StrToInt(Edit2.Text);
Sum:=AddNum(Num1,Num2);
Edit3.Text:=IntToStr(Sum);
end;
{===================动态调用DLL函数===================}
procedure TForm1.Button2Click(Sender: TObject);
Type
//这里的TADDFunc即是Project1.dll中的AddNumber方法
TADDFunc=function (X,Y:Integer):integer;Stdcall;
var
OneHandle:THandle;
ADDFunc:TADDFunc;
Num1,Num2:integer;
Sum:variant;
begin
Num1:=StrToInt(Edit1.Text);
Num2:=StrToInt(Edit2.Text);
OneHandle:=LoadLibrary('project1.dll'); //动态载入DLL,并返回其句柄
try
if OneHandle <> 0 then
ADDFunc:=GetProcAddress(OneHandle,'AddNumber'); //获取内部函数的地址
if (@ADDFunc <> nil) then
begin
sum:=ADDFunc(Num1,Num2); //实际的仿真函数
Edit3.Text:=IntToStr(sum);
end
else
RaiseLastWin32Error; //异常处理
finally
FreeLibrary(OneHandle); //调用完毕回收DLL占用的资源
end;
end;
而用C++编写的动态链接库使用大致相同,不同的是Name可能会出现乱码,这样就需要我们去查看函数名或者使用其他方法去解决:
1.查看函数名:
在dll文件的文件夹下,用“Shift+鼠标右键”选择“在此处打开命令窗口”,输入“tdump ***.dll”,查看内部的函数名
2.使用函数位置(不推荐)
如果一个DLL文件不会再改动了,每个函数的位置也是固定的了,可以使用函数位置去寻找函数地址,具体方法:
ADDFunc:=GetProcAddress(OneHandle,MakeIntResource(1));
{===================静态调用DLL函数===================}
//首先声明这个DLL中的函数,然后就可以直接调用了
function AddNum(Num1,Num2:integer):integer;stdcall;external 'project1.dll' name 'AddNumber';
//function AddNum(Num1,Num2:integer):integer;stdcall;external 'Add_Dll_test.dll' name 'AddNumber';
procedure TForm1.Button1Click(Sender: TObject);
var
Num1,Num2:integer;
Sum:integer;
begin
Num1:=StrToInt(Edit1.Text);
Num2:=StrToInt(Edit2.Text);
Sum:=AddNum(Num1,Num2);
Edit3.Text:=IntToStr(Sum);
end;
{===================动态调用DLL函数===================}
procedure TForm1.Button2Click(Sender: TObject);
Type
//这里的TADDFunc即是Project1.dll中的AddNumber方法
TADDFunc=function (X,Y:Integer):integer;Stdcall;
var
OneHandle:THandle;
ADDFunc:TADDFunc;
Num1,Num2:integer;
Sum:variant;
begin
Num1:=StrToInt(Edit1.Text);
Num2:=StrToInt(Edit2.Text);
OneHandle:=LoadLibrary('project1.dll'); //动态载入DLL,并返回其句柄
try
if OneHandle <> 0 then
ADDFunc:=GetProcAddress(OneHandle,'AddNumber'); //获取内部函数的地址
if (@ADDFunc <> nil) then
begin
sum:=ADDFunc(Num1,Num2); //实际的仿真函数
Edit3.Text:=IntToStr(sum);
end
else
RaiseLastWin32Error; //异常处理
finally
FreeLibrary(OneHandle); //调用完毕回收DLL占用的资源
end;
end;
而用C++编写的动态链接库使用大致相同,不同的是Name可能会出现乱码,这样就需要我们去查看函数名或者使用其他方法去解决:
1.查看函数名:
在dll文件的文件夹下,用“Shift+鼠标右键”选择“在此处打开命令窗口”,输入“tdump ***.dll”,查看内部的函数名
2.使用函数位置(不推荐)
如果一个DLL文件不会再改动了,每个函数的位置也是固定的了,可以使用函数位置去寻找函数地址,具体方法:
ADDFunc:=GetProcAddress(OneHandle,MakeIntResource(1));
相关文章推荐
- Delphi实现http发送xml文件片段
- Delphi实现毫秒级别的倒计时实例代码
- Delphi7中Listview的常用功能汇总
- 插件管理框架 for Delphi(一)
- delphi中一个值得大家来考虑的DLL问题
- Delphi实现检测并枚举系统安装的打印机的方法
- delphi 正弦曲线图
- Delphi下OpenGL2d绘图之画四边形的方法
- Delphi实现木马文件传输代码实例
- delphi建立、读取、存贮INI文件的方法《三》
- Delphi控件ListView的属性及使用方法详解
- delphi制作wav文件的方法
- Delphi下OpenGL2d绘图之画点的方法
- Delphi下OpenGL2d绘图之初始化流程详解
- Delphi实现窗体感知鼠标滑过并自动隐藏与显示窗口的方法
- Delphi实现截屏存盘的方法
- Delphi实现碰撞球体完整实例代码
- delphi建立、读取、存贮INI文件的方法《二》
- Delphi解析FTP地址的方法
- Delphi实现读取系统时间与日期完整实例