当前位置:主页>销售管理软件> 列表

动态链接库调用问题 找食品进销存破解版

仓库管理软件版1楼: 我自己作的dll,其中包含窗口。当主程序调用dll的函数时,会调出dll中相应的窗口。
我的问题是,当主程序调用完成后,退出主程序后就会有一个读地址错误!!!“runtime
error 216 at 0038318A”
求助高手,这是什么问题呀!!!

2楼: 是你想用的东西已经被释放掉了的缘故 如食品进销存破解版

3楼: 楼主所的错误的原因很多 能不能把代码贴出来

4楼: //============动态链接库代码===============
uses
SysUtils,
Classes,
Registry,
Windows,
Dialogs,
U_dlkz in ''U_dlkz.pas'' {Frm_dlkz},
U_sjjs in ''U_sjjs.pas'' {Frm_sjjs},
U_public in ''U_public.pas'';

{$R *.res}

function Date_Check:boolean;stdcall;
var
key:word;
date1,date2:pchar;
begin
result:=false;
key:=strtoint(ReadReg(''FlagC''));
if inttostr(key) = ''1'' then
begin
result:=true;
exit;
end;
if decryp(key,ReadReg(''FlagA'')) = ''false'' then //是否启用日期限制


begin
result:=true;
end
else
begin
//================将当前日期和注册表中的限制日期进行比较=====================
date1:=pchar(decryp(key,ReadReg(''FlagD'')));
date2:=pchar(decryp(key,ReadReg(''FlagE'')));
if (formatdatetime(''yyyy-MM-dd'',date) < date1) or (formatdatetime(''yyyy-MM-dd'',date) > date2) then
begin
if decryp(key,ReadReg(''FlagB'')) = ''true'' then
begin
Randomize;
WirteReg(''FlagC'',inttostr(Random(999999)));
key:= strtoint(ReadReg(''FlagC''));
WirteReg(''FlagA'',encryp(key,''true''));
WirteReg(''FlagB'',encryp(key,''false''));
end;
showmessage(''您的使用期限已到,请与软件供应商联系,续订软件服务!'');
try
Frm_sjjs:= TFrm_sjjs.Create(nil);
Frm_sjjs.ShowModal;
finally
Frm_sjjs.Free;
end;
end
else
begin
result:=true;
end;
end;
end;

function Date_Control(pswd:pchar):boolean;stdcall;
begin
result:=true;
if pswd = ''6852903'' then
begin
try
Frm_dlkz:= TFrm_dlkz.Create(nil);
Frm_dlkz.ShowModal;
result:=false;
finally
Frm_dlkz.Free;
end;
end;
end;

exports
Date_Check,Date_Control;
begin
end.

//============主程序调用=============
unit umain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DB, DBTables, StdCtrls,ActnList, ComCtrls, ExtCtrls,
Buttons, shellapi, XPMenu, jpeg, XPMan;

implementation
{$R *.dfm}

function Date_Check:boolean;stdcall;external ''demo.dll'';
procedure Tmain.FormCreate(Sender: TObject);
begin
if not Date_Check then application.Terminate;
end;

这是我的代码。

5楼: 动态库单步调试一下就知道了

6楼: 这类问题在Delphi中不是很好查
如果有时间
那就把所有功能代码都注释掉
只留下函数定义
看看编译后还出不出错
如果不出错了,那你再一点一点的把注释去掉
直到问题再次出现
你就找到问题点了

仓库管理软件版7楼: 多人接受答案了。