网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi中如何调用VC++创建的动态链接库
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

else return z; /*找出x,y,z中的最大整数*/
}
选择“File/Save”保存该文件的内容。
第四步:按下运行图标“!”,即生成了MyDLL.DLL(在当前工程目录的DEBUG子目录下)。

2.用Delphi编写调用MaxMin.DLL的测试程序
调用动态链接库有两种方法,即隐式调用和显式调用。
(1)隐式调用
第一步:启动Delphi,选择“New Application”,生成一个空的应用程序,在Form的“Name”属性处输入“TestVcDLLForm”,Caption属性处输入“VC++的DLL隐式调用测试”,在Form中放入控件如表1所示(其中所有的Edit控件的“Text”属性均设为空):


(表1:所用到的控件及其属性)



(图1:应用程序屏幕效果)

最后设计的Form的屏幕效果如图1所示。选择“File/Save all”,在“Save unit1 as”对话框中将源文件名设为“main.pas”,按“保存”钮;在“Save Project1 as”对话框中将工程名设为“TestVcDLL”,按“保存”钮。
第二步:选择“File/New…”,在出现的“New Item”对话框中选择“unit”,按“OK”钮,生成一个空的源文件,在该文件中输入以下内容:
unit MaxMin;

interface
function Min1(x,y,z:Integer):Integer; stdcall;
function Max1(x,y,z:Integer):Integer; stdcall;

implementation
function Min1;external ''MaxMin.DLL'' name ''Min1'';
function Max1;external Max''Min.DLL'' name ''Max1'';
end.
选择“File/Save As…”,将上述文件存为“MaxMin.pas”。
第三步:在Main.pas文件中,在“implementation”语句后加入:
uses
MaxMin;
第四步:在Form上双击“运行”按钮对该按钮的“Click”事件编程,代码如下:
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
begin
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text))); //调用动态链接库中的函数Max1
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text))); //调用动态链接库中的函数Min1
end;
保存该文件。
第五步:将上述1.中VC++6所建立的动态链接库“MaxMin.DLL”拷入Delphi的当前工作目录中。
第六步:运行。结果如图2所示。


图2:隐式调用DLL运行结果



图3:显式调用DLL运行结果

(2)显示调用
第一步:同隐式调用。只是将Form的“Caption”属性改为“VC++的DLL显式调用测试”。
第二步:选择“File/New…”,在出现的“New Item”对话框中选择“unit”,按“OK”钮,生成一个空的源文件,在该文件中输入以下内容:
unit Unit1;

interface

type
TMin1=function(x,y,z:Integer):Integer; stdcall;
TMax1=function(x,y,z:Integer):Integer; stdcall;
THandle=Integer;

implementation

end.
选择“File/Save As…”,将上述文件存为“MaxMin.pas”。
第三步:在Main.pas文件中,在“implementation”语句后加入:
uses
MaxMin;
第四步:在Form上双击“运行”按钮对该按钮的“Click”事件编程,代码如下:
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
var
Handle:THandle;
Min1:TMin1;
Max1:TMax1;
begin
Handle:=LoadLibrary(''MaxMin.dll''); //将“MaxMin.dll”的文件映象映射进调用进程的地址空间
if Handle<>0 then
begin
@Min1:=GetProcAddress(Handle,''Min1''); //取得DLL中函数Min1( )的地址
@Max1:=GetProcAddress(Handle,''Max1''); //取得DLL中函数Max1( )的地址
if (@Min1<>nil) and (@Min1<>nil) then
begin
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text))); //调用动态链接库中的函数Min1
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号