library fronts;uses
sharemem,
MidasLib,
SysUtils,
Classes,
mid_ba in '..\mid_ba.pas',
fronts_ba in '..\fronts_ba.pas',
dllmain in 'dllmain.pas',
........................;{$R *.res}
exports
create_fronts,destroy_fronts;begin
end.如上面在DLL中引用了很多单元在这里就不一一列举,最后输出函数create_fronts,destroy_fronts;上面的两个函数放在dllmain里面。在单元fronts_ba中为定义类为TFront_ba = class(TObject)其中有DLL的大部分函数。函数create_fronts的格式如下:(引用了其他单元)uses mid_ba,fronts_ba.........function create_fronts(dbs: tdatabase): Tfront_ba;//(返回值为类Tfront_ba)
begin
.....(下面主要是连接数据库,一个为局域网数据库,一个为外网数据库)
try
yy:= Tyy.Create(nil);
db1:=yy.db1Server;
db1.Connected := true;
except
yy.Free;
ba:=tfront_ba.create;
result:=ba;
exit;
end;
db2:=yy.db2Server;
try
ba:=Tfront_bc.Create;
if not ba.Enabled then
begin
ba.Free;
ba:=tfront_ba.Create;
end; except
ba:=tfront_ba.Create;
end;
result:=ba;
.....end;//--------------------------------------------------------------------------------------------------
以上为DLL的内容。不知小弟表达清楚没有?在调用的时候出现错误我也是百思不得其解呀!!
首先在tfront_ba中有大部分函数(在单元里面)如果我在程序中调用这个DLL并且调用函数
create_fronts就会返加一个Tfront_ba类是不是?格式如下:
type
TStrFunction=function (dbs:Tdatabase):Tfront_ba;stdcall;procedure TForm1.Button1Click(Sender: TObject);
var
Hinst:Thandle;
MyFunct:TStrFunction;
begin
Hinst:=LoadLibrary('fronts.dll');
if Hinst>0 then
try
@MyFunct:=GetProcAddress(HInst,'create_fronts');
if @MyFunct<>Nil then
begin
MyFunct(db);
end
else
showmessage('DLL Function not found.');
Finally
FreeLibrary(Hinst);
end
else
ShowMessage(' Library not Found');
end;
请各位指点上面的调用有没有错?如果没有那么在运行的时候就报错为什么?点击Button1之后能够执
行函数(连接正常),但马上提示一个错误点确定后就退出窗体?还有另外一个重要的问题就是在调用DLL中create_fronts函数之后返回Tfront_ba类如果我这样
t:Tfront_ba 就可以使用全部函数了t.abc(...)?但是好像也不行不知为什么?其中函数的调用方法好像与一般的DLL有点不同?请高手帮小弟解决解决....
sharemem,
MidasLib,
SysUtils,
Classes,
mid_ba in '..\mid_ba.pas',
fronts_ba in '..\fronts_ba.pas',
dllmain in 'dllmain.pas',
........................;{$R *.res}
exports
create_fronts,destroy_fronts;begin
end.如上面在DLL中引用了很多单元在这里就不一一列举,最后输出函数create_fronts,destroy_fronts;上面的两个函数放在dllmain里面。在单元fronts_ba中为定义类为TFront_ba = class(TObject)其中有DLL的大部分函数。函数create_fronts的格式如下:(引用了其他单元)uses mid_ba,fronts_ba.........function create_fronts(dbs: tdatabase): Tfront_ba;//(返回值为类Tfront_ba)
begin
.....(下面主要是连接数据库,一个为局域网数据库,一个为外网数据库)
try
yy:= Tyy.Create(nil);
db1:=yy.db1Server;
db1.Connected := true;
except
yy.Free;
ba:=tfront_ba.create;
result:=ba;
exit;
end;
db2:=yy.db2Server;
try
ba:=Tfront_bc.Create;
if not ba.Enabled then
begin
ba.Free;
ba:=tfront_ba.Create;
end; except
ba:=tfront_ba.Create;
end;
result:=ba;
.....end;//--------------------------------------------------------------------------------------------------
以上为DLL的内容。不知小弟表达清楚没有?在调用的时候出现错误我也是百思不得其解呀!!
首先在tfront_ba中有大部分函数(在单元里面)如果我在程序中调用这个DLL并且调用函数
create_fronts就会返加一个Tfront_ba类是不是?格式如下:
type
TStrFunction=function (dbs:Tdatabase):Tfront_ba;stdcall;procedure TForm1.Button1Click(Sender: TObject);
var
Hinst:Thandle;
MyFunct:TStrFunction;
begin
Hinst:=LoadLibrary('fronts.dll');
if Hinst>0 then
try
@MyFunct:=GetProcAddress(HInst,'create_fronts');
if @MyFunct<>Nil then
begin
MyFunct(db);
end
else
showmessage('DLL Function not found.');
Finally
FreeLibrary(Hinst);
end
else
ShowMessage(' Library not Found');
end;
请各位指点上面的调用有没有错?如果没有那么在运行的时候就报错为什么?点击Button1之后能够执
行函数(连接正常),但马上提示一个错误点确定后就退出窗体?还有另外一个重要的问题就是在调用DLL中create_fronts函数之后返回Tfront_ba类如果我这样
t:Tfront_ba 就可以使用全部函数了t.abc(...)?但是好像也不行不知为什么?其中函数的调用方法好像与一般的DLL有点不同?请高手帮小弟解决解决....
或者暂时FreeLibrary(Hinst);把这个注销掉。如果还不可以,就按照fenger8293的方法,调试dll
静态调用试一试看行不行.但是DLL我觉得没多大问题他们用都正常啊.我看只是调用了
function abc(d:integer):boolean;