社区
非技术区
帖子详情
大家用delphi编写DLL过吗?
programfish
2004-08-30 04:15:41
大家用delphi编写DLL过吗?
...全文
389
27
打赏
收藏
大家用delphi编写DLL过吗?
大家用delphi编写DLL过吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
MMas
2004-09-05
打赏
举报
回复
写过,现在烦着用vb调用delphi的dll
有空到http://community.csdn.net/Expert/topic/3341/3341179.xml?temp=.1751367帮帮忙
kingofghost
2004-09-05
打赏
举报
回复
简单的会点,复杂的不会.没有机会练手啊.郁闷一下:)
older
2004-09-05
打赏
举报
回复
写过
blazingfire
2004-09-05
打赏
举报
回复
常干的事了!
yifei1900
2004-09-05
打赏
举报
回复
我们一般用于核心代码隐藏,
写DLL就和写EXE一个简单,
当然了,高级的功能,不是一般人能会的。
lw549
2004-09-05
打赏
举报
回复
to: arhatcsdn(问题先生)
动态生成就ok了
arhatcsdn
2004-09-05
打赏
举报
回复
写过,做练习的,没有什么功能和意义,只是不知道各位是怎样用DLL重用窗体的
southdream
2004-09-05
打赏
举报
回复
我用DLL写过支持PLUGIN的进销存算吗?
hc0007
2004-09-05
打赏
举报
回复
我学了一个下午,就会写DLL了,不是吹牛,写DLL和写普通的exe没有很大的区别,只要编译时修改一下.dpr文件,还有一些小的地方注意一下.
以下是从Google搜索到的
Delphi与VisualBasic、VisualFoxPro等软件一样,属于RAD工具(快速应用开发工具)。适合开发32位或16位/32位混合应用程序。Delphi所使用的程序语言是ObjectPascal,是结构化、面向对象的编译型语言,具有高执行效率、可重用性、易维护性,及较强的异常处理能力、类封装能力等。VB与Delphi相比,VB不能对程序进行编译,只能解释执行,更重要的不同是Delphi具有较强的继承性,Delphi的应用程序可编译DLL模块,VB却无法编译,只能调用C编译的DLL。而Delphi不仅可调用C++产生的DLL模块,同样C++程序也可调用Delphi所产生的DLL部件。这样交互调用,无须重复开发,大大缩短了生产周期。
1、用Delphi创建DLL
Delphi的DLL创建并不复杂,下面向大家介绍Delphi的DLL创建方法。
1〕首先创建一个新的DLL项目(NewProject),因为DLL与调用它的主程序要分开编译。如果DLL模块已经建立在调用它的项目中(Project),则将它的窗体(Form)从Project移出,另建一个新的项目(NewProject)。只需从File菜单选中NewProject项,然后将DLL的Pas模块文件加入到项目中,再将其自动建立的Form1删除即可。
2〕在DLL的DPR文件中把Program关键字改为Library,申明为动态链接库,在USES语句后面加入ExPorts语句,指明调用DLL的函数名。
3〕如果主程序的DPR文件已有DLL窗体CreateForm的语句,则将其去掉。
4〕在DLL的Pas文件中Type......End后加入该DLL的函数或过程的声明,形式如:
FunctionName(argment):Boolean;export;
该函数或过程应加入窗体的Create和Free(产生和释放)方法。
5〕对项目进行编译即可。
2、DLL的调用
调用DLL有两种方法,一种是在应用程序装载时调用,另一种是在应用程序运行时调用。首先介绍装载时DLL的调用:
(1)装载时调用DLL
在调用DLL的Pas文件中,对DLL函数进行外部声明,声明应位于Implementation的Uses语句后,形式如下:
Implementation
Uses Dialogs;
Function Name(argment):Boolean;far;External′CallName′;
......
其中External关键字后面的引号内的字串是DLL的文件名。声明以后即可在Pas文件任何地方引用DLL函数。
装载时调用DLL的优点是速度较快,程序间也可共享代码。
(2)运行时调用DLL
DLL的另一种调用方法是在运行时调用。要调用到Windows的API函数:loadlibrary,Getprocaddress等。主要用于调用DELPHI和其它语言,特别是C++编译的DLL。
假定你的DLL包括一个函数:
FunctionMyFunc(aparam:word):string;export;
首先在程序Type类型声明处加入一句:
Type
TMyfunc=function(aparam:word):string;
此句的作用如同C++中声明的函数指针。
然后定义如下变量∶
Var
aptr:TFarproc;
lhnd:THandle;
s:string;
其中Aptr,lhnd两变量声明必须有,s是DLL函数返回值,视情况而定。
在调用DLL处加入如下语句进行DLL装载:
lhnd:ΚLoadlibrary(′路径\DLL文件名′);
{如lhnd:ΚLoadlibrary(′c:\aa\bb.dll′);
aptr:=GetprocAddress(lhnd,′Myfunc′);
下面可直接调用DLL了:
s:=TMyfunc(bptr)(60);{根据函数填相应的变量参数}
调用完以后,用FreeLibrary释放DLL占用的内存:
FreeLibrary(lhnd);
下面给出一个DLL的创建以及运行时调用的示例,该DLL主要用来检查输入的口令是否正确,窗体含有一个Edit编辑框,两个按钮Button,一个标签Label,在编辑框内输入口令,根据比较结果返回真假值。
{main.pas主程序(运行时调用DLL)}
unit Main;
interface
uses WinTypes,WinProcs,Classes,Graphics,Forms,Controls,StdCtrls,ExtCtrls;
type
TForm1=class(TForm)
Edit1:TEdit;
Label1:TLabel;
Button1:TButton;
Bevel1:TBevel;
GroupBox1:TGroupBox;
StatusLbl:TLabel;
procedure Button1Click(Sender:TObject);
end;
TGetPass=function(aa:string):boolean;
var
Form1:TForm1;
getpass:TGetpass;
lhnd:THandle;
aptr:TFarproc;
implementation
uses Dialogs;
{$R*.DFM}
{Import routine from DLL.Takes password to matchand returns boolean.}
{function GetPassword(Password:string):Boolean;far;external′CHKPWORD′;}
{Call password check routine,show status informcaption.}
procedure TForm1.Button1Click(Sender:TObject);
begin
if Edit1.Text=′′then
begin
MessageDlg(′Entersamplepasswordfirst′,mtInformation,[mbOK],0);
Edit1.SetFocus;
end
else
begin
lhnd:=loadlibrary(′Chkpword.dll′);
aptr:=getprocaddress(lhnd,′GetPassword′);
if TGetpass(aptr)(Edit1.Text) then
StatusLbl.Caption:=′Verifiedpassword′
else
StatusLbl.Caption:=′Invalid password′;
freelibrary(lhnd);
end;
end;
end.
{dllform.pasDLL模块}
unit Dllform;
interface
uses WinTypes,WinProcs,Classes,Graphics,Forms,Controls,Buttons,SysUtils,StdCtrls;
type
TPasswordForm=class(TForm)
Edit1:TEdit;
Label1:TLabel;
BitBtn2:TBitBtn;
BitBtn1:TBitBtn;
end;
function GetPassword(Password:string):Boolean;export;
implementation
uses Dialogs;
{$R*.DFM}
function GetPassword(Password:string):Boolean;
var
PasswordForm:TPasswordForm;
begin
Result:=False;
PasswordForm:=TPasswordForm.Create(Application);
try
with PasswordForm do
if ShowModal=mrOK then
if UpperCase(Edit1.Text)<>UpperCase(Password) then
MessageDlg(′Invalid Password′,mtWarning,[mbOK],0)
else
Result:=True;
finally
PasswordForm.Free;
end;
end;
end.
lw549
2004-09-05
打赏
举报
回复
to: seahjun(东邪)
我是开玩笑的,看看我以前的帖子就知道了.
yoyodd
2004-09-05
打赏
举报
回复
DLL又不是什么难事,你看一会儿书就会写了!
bgtwuqs
2004-09-04
打赏
举报
回复
写过..
luckyboyforever
2004-09-03
打赏
举报
回复
刚刚学习中............
seahjun
2004-09-03
打赏
举报
回复
据我所知,只有3个星星的家伙才写过
====================================
To:lw549(那个孩子他爹),你这样说未免太武断了。
我就写过,自己写自己用,并不断改进中。
pdbird
2004-09-03
打赏
举报
回复
中到大一点的系统全是用DLL`,每个大的模块一个DLL,楼主你有什么问题要问的吗?
wenjianyao
2004-09-03
打赏
举报
回复
大家都“跑题”了,楼主问大家做过没有
做过回答做过,没有做过回答没做过就可以了
嘿嘿
zjqyb
2004-09-03
打赏
举报
回复
楼上的何以
reallike
2004-09-03
打赏
举报
回复
能用dll就尽量用了:〉
zjqyb
2004-09-03
打赏
举报
回复
能不用dll就尽量不用!
Wyi23
2004-09-01
打赏
举报
回复
写DLL难道有想像那么复杂和神秘吗...
和VC一样DELPHI能写DLL,而且更简化了
加载更多回复(7)
delphi
编写
DLL
.rar
delphi
编写
动态链接库
Dll
,附
delphi
调用
dll
的示例,包含
dll
的源码和调用
dll
的源码。
手把手教
delphi
写你的
dll
文件
手把手教
delphi
写你的
dll
文件 一、调用参数用stdcall 和前面提到的一样,当引用
DLL
中的函数和过程时也要使用stdcall参数,原因和前面提到的一样。 二、用external语句指定被调用的
DLL
文件的路径和名称 正如...
Delphi
XE10零基础实战快速入门
通过课堂上一个一个的实战例子,演示
Delphi
XE10的用法,最后通过一个完整的通讯录程序,让学员初步掌握软件开发的全部流程 让零基础学员快速入门
Delphi
编程,快速掌握
Delphi
的使用方法,并能够制作出自己的软件来。...
Delphi
XE10.3
编写
的静态
dll
及如何调用
dll
的示例
Delphi
XE10.3
编写
的静态
dll
及如何调用
dll
的示例,简单好用,包含
dll
工程文件和exe工程文件
Delphi
编写
DLL
组件并调用的演示示例.rar
Delphi
编写
DLL
组件并调用的演示示例,内含:使用抽象类(示例程序8-5)、使用接口(示例程序7-8)、未使用
DLL
(示例程序3-13)、用
Dll
封装对象(示例程序7-6)。主要研究
Delphi
中的
DLL
封装和调用对象技术,...
非技术区
829
社区成员
53,611
社区内容
发帖
与我相关
我的任务
非技术区
Delphi 非技术区
复制链接
扫一扫
分享
社区描述
Delphi 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章