我现在的做法是这样的,把EXE中的SESSION传到DLL中去,调DLL时可以把连接传到dll,dll也能正常退出,但是在调试环境下当退出主程序时(EXE),就会出现'ACCESS VIOLATION AT 0X77F6CCE2'的错误,不在调试环境下不会。我知道EXE和DLL如果都用Runtime packages,就可以共享数据连接,问题是如果不用Runtime packages要怎么做,以下是我的代码,大侠帮忙分析一下,问题解决100分送上。
EXE:
begin
Database2.Connected := true;
begin
moudle := loadlibrary('Project2.dll');
try
if moudle = 0 then
begin
application.MessageBox(pchar('模块' + '' + DllName + '' + '目前正在开发中...'), '系统提示', mb_ok +
mb_iconwarning);
exit;
end;
@showdll := getprocaddress(moudle, 'showdll');
showdll(application, session, Database2);
finally
freelibrary(moudle);
end;
end;
end;
DLL中的代码:
begin
session:=AppSessions ;
Form2 := Tform2.create(application);
try
Form2.ShowModal;
finally
Form2.Free;
end;
end;
EXE:
begin
Database2.Connected := true;
begin
moudle := loadlibrary('Project2.dll');
try
if moudle = 0 then
begin
application.MessageBox(pchar('模块' + '' + DllName + '' + '目前正在开发中...'), '系统提示', mb_ok +
mb_iconwarning);
exit;
end;
@showdll := getprocaddress(moudle, 'showdll');
showdll(application, session, Database2);
finally
freelibrary(moudle);
end;
end;
end;
DLL中的代码:
begin
session:=AppSessions ;
Form2 := Tform2.create(application);
try
Form2.ShowModal;
finally
Form2.Free;
end;
end;
解决方案 »
- 具体怎么写一个类?
- ado提交数据后如何能回滚到刚才录入的数据里面
- vc做的ocx参数是 long* 数组,在delphi中参数定义为 var pData:Integer 我如何传递参数?
- 通过asp上传的图片(sql 2000db),能否再delphi中打开显示?格式兼容吗?
- 怎样在EDIT输入的同时,用QUERY在数据库里查找某一列条件为edit.text的数据?
- 谁能告诉我Sysint的范围,格式,是否有符号以及和Integer的区别?
- 问个问题:)希望大家帮忙。
- 请问那儿有fastreport的中文开发指南?
- 怎么让程序界面更漂亮?
- 想做一个时间轴显示。
- 怎么改变墙纸
- 界面问题:如何将一个窗口切分为三个窗口(如:VC中的切分窗口,每个窗口一个视图)
begin
session:=AppSessions ;
Form2 := Tform2.create(application);
try
Form2.ShowModal;
finally
Form2.Free;
end;
end;
中的Form2.Free改成Form2.Destroy试试
还有dll里声明的方法一定要加上stdcall,而调用时声明的函数类也要加上stdcall
改成
form2.hide;