我把一个过程写到dll。delphi调用了 无效果,求教,那里错了1动态链接库文件
library tbzsjdll;
{$DEFINE tbzsjdll}
uses
SysUtils,
Classes,
tbzsjint in 'tbzsjint.pas'; procedure proc_tbzsj(j:TDateTime;m:Integer;o:Integer); StdCall;
var
bzsj,tbzsj ,bz:tdatetime;
t:integer;
begin
bzsj:=j+m/24/60;
tbzsj:=j+m/24/60+o/24/60;
bz:=j+o/24/60;
end;
end;{ Export the function by name }
exports
proc_tbzsj;
end.2接口文件
unit tbzsjint;
interface
type Ttbzsj= record
bzsj,tbzsj ,bz:tdatetime;
t:integer;
end;
{$IFNDEF PENNIESLIB}
{ Declare function with export keyword } procedure proc_tbzsj(j:TDateTime;m:Integer;o:Integer); StdCall;
{$ENDIF}implementation{$IFNDEF PENNIESLIB}
{ Define the imported function }
procedure proc_tbzsj; external 'tbzsjdll.DLL' name 'proc_tbzsj';
{$ENDIF}end.3主程序(调用dll)
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}
uses tbzsjint;
procedure TForm1.Button1Click(Sender: TObject);
varr:Ttbzsj;
begin proc_tbzsj(now,20,5);
Label1.caption:=formatdatetime('yyyy-mm-dd hh:mm:ss',r.tbzsj);end;end.
library tbzsjdll;
{$DEFINE tbzsjdll}
uses
SysUtils,
Classes,
tbzsjint in 'tbzsjint.pas'; procedure proc_tbzsj(j:TDateTime;m:Integer;o:Integer); StdCall;
var
bzsj,tbzsj ,bz:tdatetime;
t:integer;
begin
bzsj:=j+m/24/60;
tbzsj:=j+m/24/60+o/24/60;
bz:=j+o/24/60;
end;
end;{ Export the function by name }
exports
proc_tbzsj;
end.2接口文件
unit tbzsjint;
interface
type Ttbzsj= record
bzsj,tbzsj ,bz:tdatetime;
t:integer;
end;
{$IFNDEF PENNIESLIB}
{ Declare function with export keyword } procedure proc_tbzsj(j:TDateTime;m:Integer;o:Integer); StdCall;
{$ENDIF}implementation{$IFNDEF PENNIESLIB}
{ Define the imported function }
procedure proc_tbzsj; external 'tbzsjdll.DLL' name 'proc_tbzsj';
{$ENDIF}end.3主程序(调用dll)
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}
uses tbzsjint;
procedure TForm1.Button1Click(Sender: TObject);
varr:Ttbzsj;
begin proc_tbzsj(now,20,5);
Label1.caption:=formatdatetime('yyyy-mm-dd hh:mm:ss',r.tbzsj);end;end.
解决方案 »
- Dbgrideh 一个单元格中显示多行文本,怎么控制各行的字体属行和行间距?
- DELPHI单元向导外挂专家技术(开放源代码)
- 非常感谢您能在百忙之中帮我解决几个问题!
- websnap问题,老规矩,第一个回答正确给全分!~~~~~~~~~
- 帮忙啊!怎么解决!!!给点代码!
- 如何解决错误:应用程序调用一个已另一个线程整理的界面。?
- 如何提高基础?
- 关于日期时间的问题,高分求教!
- ide环境下,我的additional面板没有timer控件,我怎么搞???先答先抢分喽!
- ClientDataSet加载XML文件取值问题
- 请问如何对cxgrid 的统计结果进行排序
- FastReport中打印高亮某个字符
1、这么简单的函数有没有必要用到一个接口文件,当然除非你确实需要返回一个自定义的类
2、如果调用不频繁的话,最好改为动态调用DLL
SysUtils,
Classes,
tbzsjint in 'tbzsjint.pas';{$R *.res}function proc_tbzsj(j: tdatetime; m: integer; o: integer): Ttbzsj; StdCall;
var
r: Ttbzsj;
t: integer;
begin
r.bzsj := j + m / 24 / 60;
r.tbzsj := j + m / 24 / 60 + o / 24 / 60;
r.bz := j + o / 24 / 60;
Result := r;
end;exports
proc_tbzsj;end.Interfaceunit tbzsjint;interfacetype Ttbzsj = record
bzsj, tbzsj, bz: tdatetime;
t: integer;
end;
function proc_tbzsj(j: tdatetime; m: integer; o: integer): Ttbzsj; StdCall;
implementation{$IFNDEF PENNIESLIB}
{ Define the imported function }
function proc_tbzsj; external 'tbzsjdll.DLL' name 'proc_tbzsj';
{$ENDIF}end.Main program:uses tbzsjint;procedure TForm1.Button1Click(Sender: TObject);
var
r: Ttbzsj;
begin
r := proc_tbzsj(now, 20, 5);
Label1.caption := formatdatetime('yyyy-mm-dd hh:mm:ss', r.tbzsj);
end;
但可以在过程参数中定义,比如你的例子中可以定义为:
procedure proc_tbzsj(j: tdatetime; m: integer; o: integer; var r Ttbzsj);
不知我解释清楚了没有?
另外用过程这种方式可以输出多个结果,不像function只能有一个返回值,function若想返回多个值就要定义类或者返回数组。
希望我的回复可以帮到你。
少打了冒号,呵呵