本人想做个dll,不知应如何写能否给点建意.最好能给个简单的例子
解决方案 »
- 新手求助,关于C#开发数据库系统的登录权限问题
- 急等,简单的SQL日期查询
- 我抗日,但不盲目仇日!!!
- ComboBox_department我要让它不可以输入,而只能选择
- 怎样才能自动给多个控件合理布局?
- 如何单独取得年月日(整型)
- 请各位高手帮忙: 怎样得到CPU的利用率!在线等等......
- 进程A和被注入的进程B的DLL之间 如何通过自定义消息进行通讯
- 元旦了,祝大家新年发财!
- 关于datasnap Rest Application开发的服务器端,web端调用的URL是什么啊
- 晕!用SQL2000查询分析器得到的查询结果与DELPHI的SQL EXPLORER不一样,高手指教!!
- Delphi中用oracle的decode,case when 问题??麻烦各位大侠帮忙。
library Delphi; uses SysUtils, Classes; function TestDll(i:integer):integer;stdcall; begin Result:=i; end; exports TestDll; begin end.
的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、对项目进行编译即可。
二、DLL的调用
调用DLL有两种方法,一种是在应用程序装载时调用,另一种是在应用程序运行时调用。首先介绍装载时DLL的调用:
(1)装载时调用DLL
Pas文件中,对DLL函数进行外部声明,声明应位于Implementation的Uses语句后,形式如下:
Implementation
UsesDialogs;
functionName(argment):Boolean;far;external'Call Name';
......
其中External关键字后面的引号内的字串是DLL的文件名。声明以后即可在Pas文件任何地方引用DLL函数。
装载时调用DLL的优点是速度较快,程序间也可共享代码。
(2)运行时调用DLL
DLL的另一种调用方法是在运行时调用。要调用到Win dows的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);
具体细节还很多,你去找本书看看嘛。