关于dll的一个问题(100分)

  • 主题发起人 主题发起人 delnut
  • 开始时间 开始时间
D

delnut

Unregistered / Unconfirmed
GUEST, unregistred user!
我试着写了一个简单的dll,输出一个过程,procedure Trans_Time(Second:Integer;dllTran:PTran);StdCall;目的是把输入的秒数转化为
hh:mm:ss制。dll调用了一个接口单元:int_Transtime。接口单元中定义了Tran类型(record)。PTran为指向Tran的指针。在调用dll时,我先生成一个PTran指针:cTime:=new(PTran),然后Trans_Time(Key_time,@cTime);其中cTime为引用。但在执行时由AcessViolation 错误,请大家指教。

 
秒数转化为hh:mm:ss制
直接用DateUtils单元的函数就行了
 
谢谢你的答复,但是我的主要目的是实验dll的用法,是否能够指出我的错误的地方呢?
 
接口单元中定义了Tran类型(record)。PTran为指向Tran的指针。在调用dll时,我先生成一个PTran指针:cTime:=new(PTran),然后Trans_Time(Key_time,@cTime);
-----------------------------------------------------------------------
cTime:=new(Tran)
// 应生成Tran实例,而不应是它的指针。
 
Library UserDll;
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,ComCtrls,ExtCtrls,StdCtrls,FileCtrl,ShellApi,
Function1 in 'Function1.pas';

{$R *.res}
Exports
TimeT_To_DateTime,
TimeSecondToTime;
begin
end.
unit Function1;

interface

uses
//请根据情况是否要加上ShareMem单元,注意ShareMem单元必须放在第一个
//如果加了ShareMem单元,请同时发布Borlndmm.dll
// ShareMem,
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ComCtrls,ExtCtrls,StdCtrls,FileCtrl,Registry,IniFiles,ShellApi;

function TimeT_To_DateTime(TimeT: Longint): TDateTime
stdcall;
procedure TimeSecondToTime(const secs: Integer
var H, M, S: Word)
stdcall;


implementation

{整数到时间}
function TimeT_To_DateTime(TimeT: Longint): TDateTime;
var
ts: TTimeStamp;
begin
Dec(TimeT, 3600 * 8)
// still unprecise
ts.Time := (TimeT mod 86400) * 1000;
ts.Date := TimeT div 86400 + 719163;
Result := TimeStampToDateTime(ts);
end;

{秒转化}
procedure TimeSecondToTime(const secs: Integer
var H, M, S: Word);
begin
H := secs div 3600;
M := (secs mod 3600) div 60;
S := secs mod 60;
end;


end.
这个看一下???
 
Trans_Time(Key_time,cTime);
 
谢谢amli的回答,你是对的,apw的答案恐怕有点问题,因为我查阅了一下,new是为指针分配空间的,app2001也谢谢你的代码。还有amli,在我调用了api函数exitwindows后,为什么先跳出一个对话框再执行呢?这是我的email:huxinjsf@hotmail.com,谢谢。
 
后退
顶部