读书人

:哪位大哥dll事例小弟我啊

发布时间: 2012-02-23 22:01:34 作者: rapoo

高分求教:哪位大哥dll事例我啊,
哪位大哥,基的,如何在delphi7中求乘的函,然後在窗中用它
啊,急用啊,了

[解决办法]
library Project2;

uses
SysUtils,
Classes;

{$R *.res}

function fac(i:integer):integer;
begin
if (i=1) or (i=1) then
result:=1
else result:=I*fac(i-1);
end;

exports
fac index 1;

begin
end.

//将project2编译后将这个dll拷贝到project1目录下
unit Unit1;

interface

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

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

var
Form1: TForm1;

implementation
function fac(i:integer):integer;external 'project2.dll ';
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage( inttostr( fac( 10 ) ) );
end;

end.

[解决办法]
library Library1;

uses
Sharemem;

{$R *.res}

//计算阶乘,限制条件:结果不超出Integer范围
function Factorial(vFactor: Integer): Integer; stdcall;
begin
if vFactor <= 0 then
Result := 0
else if vFactor = 1 then
Result := 1
else
Result := vFactor * Factorial(vFactor - 1);
end;

exports
Factorial;

begin
end.

----------------------------------------------------------------

//静态调用声明
function Factorial(vFactor: Integer): Integer; stdcall; far; external 'Library1.dll '

//动态调用声明
type
TFactorial = function(vFactor: Integer): Integer; stdcall;

var
Form1: TForm1;

implementation

{$R *.dfm}

//静态调用
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( '5 的阶乘是: ' + IntToStr(Factorial(5)));
end;

//动态调用
procedure TForm1.Button2Click(Sender: TObject);
var
vModule: THandle;
pProc: TFarProc;
begin
vModule := LoadLibrary( 'Library1.dll ');
if vModule <= 32 then
begin
ShowMessage( '加载Library1.dll失败 ');
Exit;
end;
pProc := GetProcAddress(vModule, 'Factorial ');
if not Assigned(pProc) then
begin
ShowMessage( '没有找到Factorial函数 ');
Exit;
end;
ShowMessage( '5 的阶乘是: ' + IntToStr(TFactorial(pProc)(5)));
end;
[解决办法]
library Project2;

uses
SysUtils,
Classes;

{$R *.res}

function fac(i:integer):integer;
begin
if (i=1) or (i=1) then
result:=1
else result:=I*fac(i-1);
end;

exports
fac index 1;

begin
end.

这个编译后就是一个标准的dll
[解决办法]
感谢月亮。你的光辉照耀着我们前进!

读书人网 >.NET

热点推荐