关于*.DLL的简单问题,大家请进(100分)

  • 主题发起人 主题发起人 chenshan
  • 开始时间 开始时间
C

chenshan

Unregistered / Unconfirmed
GUEST, unregistred user!
有谁能提供一个用Delphi创建*.dll并调用的简单例子
 
知道的请贴出代码
 
很多DELPHI的书里都有写啊。
 
创建:
FILE->NEW->DLL:
library DLLEXA;

uses
SysUtils,
Classes,
Dialogs,
windows;

{$R *.RES}
procedure ShowInfo(str:string);stdcall;
begin
showmessage(str+chr(13)+chr(10)+'DLL Test');
end;
exports ShowInfo;

begin

end.


调用DLL:
……
var
Form1: TForm1;

implementation

{$R *.DFM}
procedure ShowInfo(str:string);stdcall;external 'DLLEXA.DLL' name 'ShowInfo';
procedure TForm1.Button1Click(Sender: TObject);
begin
showinfo('hello!')
end;

end.
 
如果你将你想将Form以ActiveX组件的形式存入DLL则应如下方式写DLL:
library DICDLL;

uses
SysUtils,
Classes,
Forms,
ActiveX,
EncodeFrm in 'EncodeFrm.pas' {FrmEncode},//这是本人的秘密Form,不能给你的
frmDecode in 'frmDecode.pas' {FormDecode};//这也是本人的秘密Form,不能给你的

{$R *.RES}
procedure OpenEncodeForm;
begin
try
FrmEncode:=TFrmEncode.Create(nil);
FrmEncode.ShowModal;
finally
FrmEncode.Free;
end;
end;

procedure OpenDecodeForm;
begin
try
FormDecode:=TFormDecode.Create(nil);
FormDecode.ShowModal;
finally
FormDecode.Free;
end;
end;


exports
OpenEncodeForm,
OpenDecodeForm;
begin
CoInitialize(nil);
end.

调用单元如下:
unit DLLDICFrmUnt;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure OpenEncodeForm
external 'DICDLL.DLL'
procedure OpenDecodeForm
external 'DICDLL.DLL'

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenEncodeForm;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
OpenDecodeForm
end;

end.
 
我考,这种代码也有人贴。
 
问题有人问,知道,就应该答!简单的都瞧不起答,难的又不会答,那这大富翁也就可以休站了!
 
to TYZhang:
你的水平有多高??你好象不该来大翁富哦!!!这里可是所有程序员的乐园!
 
没人肯给我一个例子吗
 
dll:(文件名:test.dll)
library test;
uses
sharemem,
SysUtils,
Classes;
function abc(a:integer;var b:integer):integer;stdcall;
begin
b:=a+1;

result:=1;
end;

exports
abc;

begin
end.

调用test.dll中的abc函数:
var
function abc(a:integer;var b:integer):integer;stdcall;external'test.dll';
//test.dll和程序放在同一目录下不用写路径
procedure TForm1.Button1Click(Sender: TObject);
var
a1,b1:integer;
begin
a1:=9;
abc(a1,b1);
//调用test.dll的abc函数
end;
 
告诉你的 email ,我给你发一个
 
不是已经有人发了么?
不过他们贴的都是静态调用的,还有动态的
 
动态的好说,PROJECT|OPTION|ADVANCED LINKER| 中设置 Delay Load, 选你的DLL。这样,
DELPHI会自动动态连接你的DLL。
 
动态调用可使用LoadLibrary及GetProcAddress这两个函数。
 
chenshan,人家给了你答案,你都认不到答案,哎,我强烈
建议你认认真真看一下DELPHI的在线帮助。

索引:
dynamic-link libraries

如有帮助,不忘了给分。
 
chenshan
你要DLL,有了,简单吗?你要什么样的?
嫌简单,就自己做难的……
不管动态、静态,DLL就是这样生成的,动态调用用两个API可以了!
 
不好意思!由于很久没来.请大家有程序能发一份给我.chenshantai@163.net.分数大家平分吧
 
后退
顶部