在Delphi中调用DLL

在Delphi中调用DLL

ID:37738346

大小:26.00 KB

页数:4页

时间:2019-05-30

在Delphi中调用DLL_第1页
在Delphi中调用DLL_第2页
在Delphi中调用DLL_第3页
在Delphi中调用DLL_第4页
资源描述:

《在Delphi中调用DLL》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在Delphi中调用DLL版权声明:CSDN是本Blog托管服务提供商。如本文牵涉版权问题,CSDN不承担相关责任,请版权拥有者直接与文章作者联系解决。<一>在Delphi中静态调用DLLtop调用一个DLL比写一个DLL要容易一些。首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较。同样的,我们先举一个静态调用的例子。unitUnit1;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Form

2、s,Dialogs,StdCtrls;typeTForm1=class(TForm)Edit1:TEdit;Button1:TButton;procedureButton1Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm1:TForm1;implementation{$R*.DFM}//本行以下代码为我们真正动手写的代码functionTestDll(i:integer):int

3、eger;stdcall;external’Delphi.dll’;procedureTForm1.Button1Click(Sender:TObject);beginEdit1.Text:=IntToStr(TestDll(1));end;end.上面的例子中我们在窗体上放置了一个编辑框(Edit)和一个按钮(Button),并且书写了很少的代码来测试我们刚刚编写的Delphi.dll。大家可以看到我们唯一做的工作是将TestDll函数的说明部分放在了implementation中,并且用extern

4、al语句指定了Delphi.dll的位置。(本例中调用程序和Delphi.dll在同一个目录中。)让人兴奋的是,我们自己编写的TestDll函数很快被Delphi认出来了。您可做这样一个实验:输入“TestDll(”,很快Delphi就会用fly-by提示条提示您应该输入的参数是什么,就像我们使用Delphi中定义的其他函数一样简单。注意事项有以下一些:一、调用参数用stdcall。和前面提到的一样,当引用DLL中的函数和过程时也要使用stdcall参数,原因和前面提到的一样。二、用external语句

5、指定被调用的DLL文件的路径和名称。正如大家看到的,我们在external语句中指定了所要调用的DLL文件的名称。没有写路径是因为该DLL文件和调用它的主程序在同一目录下。如果该DLL文件在C:,则我们可将上面的引用语句写为external’C:Delphi.dll’。注意文件的后缀.dll必须写上。三、不能从DLL中调用全局变量。如果我们在DLL中声明了某种全局变量,如:vars:byte。这样在DLL中s这个全局变量是可以正常使用的,但s不能被调用程序使用,既s不能作为全局变量传递给调用程序。不

6、过在调用程序中声明的变量可以作为参数传递给DLL。四、被调用的DLL必须存在。这一点很重要,使用静态调用方法时要求所调用的DLL文件以及要调用的函数或过程等等必须存在。如果不存在或指定的路径和文件名不正确的话,运行主程序时系统会提示“启动程序时出错”或“找不到*.dll文件”等运行错误。<二>在Delphi中动态调用DLLtop动态调用DLL相对复杂很多,但非常灵活。为了全面的说明该问题,这次我们举一个调用由C++编写的DLL的例子。首先在C++中编译下面的DLL源程序。#includeextern”C

7、”_declspec(dllexport)intWINAPITestC(inti){returni;}编译后生成一个DLL文件,在这里我们称该文件为Cpp.dll,该DLL中只有一个返回整数类型的函数TestC。为了方便说明,我们仍然引用上面的调用程序,只是将原来的Button1Click过程中的语句用下面的代码替换掉了。procedureTForm1.Button1Click(Sender:TObject);typeTIntFunc=function(i:integer):integer;stdcal

8、l;varTh:Thandle;Tf:TIntFunc;Tp:TFarProc;beginTh:=LoadLibrary(’Cpp.dll’);{装载DLL}ifTh>0thentryTp:=GetProcAddress(Th,PChar(’TestC’));ifTp<>nilthenbeginTf:=TIntFunc(Tp);Edit1.Text:=IntToStr(Tf(1));{调用TestC函数}endelseShowMessage

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。