一个DLL的问题,困惑好几天了 ( 积分: 100 )

  • 主题发起人 主题发起人 mally
  • 开始时间 开始时间
M

mally

Unregistered / Unconfirmed
GUEST, unregistred user!
我制作了一个DLL A,其接口函数如下:
uses
ShareMem,
.......;
{$R *.res}

function ShowWeatherForm(ConnectionStr :string;AHandle:THandle):integer;
var
SaveDllAppHandle: THandle;
begin
SaveDllAppHandle := Application.Handle;
Application.Handle := AHandle;
result := -1;
Form1 := TForm1.Create(mainForm);
try
Form1.ADOConnection1.Connected := False;
Form1.ADOConnection1.ConnectionString := ConnectionStr;
Form1.ADOConnection1.Connected := true;
Form1.ShowModal;
finally
Form1.Free;
Form1 := nil;
Application.Handle := SaveDllAppHandle;
end;
end;
exports
ShowWeatherForm;

我在程序中直接动态调用A,调用语句如下:
type TShowWeatherForm = function(ConnectionStr :string;MainForm:TForm):integer;
.........
procedure TfrmSingleBowl.rzbtbtn1Click(Sender: TObject);
var
ShowWeatherForm : TShowWeatherForm;
LibHandle : THandle;
begin
if not fileexists(extractfiledir(application.ExeName)+'/WeatherDll.dll') then
begin
showmessage('找不到文件:WeatherDll.dll');
exit;
end;
LibHandle := Loadlibrary(pchar(extractfiledir(application.ExeName)+'/WeatherDll.dll'));
try
if LibHandle = 0 then
begin
showmessage('导入动态链接库WeatherDll.dll错误');
exit;
end;
@ShowWeatherForm := GetProcAddress(LibHandle,'ShowWeatherForm');
if @ShowWeatherForm = nil then
begin
showmessage('导入动态链接库WeatherDll.dll错误');
exit;
end;
ShowWeatherForm(ADOConnection1.ConnectionString,application.MainForm);
finally
FreeLibrary(LibHandle);
end;
end;

一切都运行正常。但是我有一个DLL B,接口函数和A的一样,也是输出一个模式窗体,只是在B中的窗体中有一个按钮,点击按钮就动态调用DLL A,调用代码和上面一样,这个时候就经常出现内存地址访问错误的提示,但是偶尔是好的。我调试了几天了,就是不知道为什么在程序中直接调用DLL A是好好的,用DLL B调用DLL A的时候就出问题了。
 
Form1 := TForm1.Create(mainForm);
----------------------------------------
mainForm 从何而来??? 是 Application.MainForm 吗??
既然 Application.Handle := AHandle; 不妨使用 Form1 := TForm1.Create(Application);


虽然可以使用 ShareMem 单元来使用 string 参数,但我还是较愿意使用 Pchar 形参数。
不妨使用 PChar 参数看看如何。
 
lz我也经常出现内存错误.代码都是照着抄的,郁闷呢
 
如果你想花最少的钱学习流行的计算机技术,本人低价提供
计算机专业高清晰 视 频 教 程,所有教程由业内名家讲解,物超所值,
所有光盘4元/张,特快专递全国三天内到货.
联系方式:手 机:1 3 5 76145612(手机联系佳) Q Q:108410943
E-mail:ncncldjjg@126.com
1、Oracle9iOCP(Oracle认证专家DBA)视频教程(23CD)
2、SQL语言、数据挖掘、SQLServer2000视频教程(6CD)
3、计算机网络原理视频教程(4CD)
4、计算机实用组网技术视频教程(3CD)
5、MCSE(微软认证系统工程师)认证视频教程(11CD)
6、windows2003即学即会视频教程(6CD)
7、J2EE Web程序开发定向班/Java就业班视频教程
(java基础jsp核心技术UML设计)(13CD)
8、J2EE基础高级案例分析视频教程(9CD)
9、马士兵J2SE入门与精通(含坦克大战、BBS实例)视频教程(6CD)
10、java语言深入详解视频教程(12CD)
11、java技术从入门到精通视频教程(21CD)
12、javascript全接触视频教程(13CD)
13、各类网站源程序(9CD)
14、unix原理视频教程(3CD)
15、Linux软件开发工程师(C语言)视频教程(4CD)
16、Linux配置、管理、优化实战工程师视频教程(8CD)
17、Linux内核编程视频教程(11CD)
18、C语言详解视频教程(2CD)
19、VC++6.0(MFC)开发技术术详解视频教程(6CD)
20、ASP.NET中文视频教程(3CD)
21、洪恩C#入门多媒体教程(1CD)
22、XML技术视频教程(2CD)
23、操作系统视频教程(3CD)
24、网络技术基础视频教程(2CD)
25、数据结构视频教程(5CD)
26、清华大学计算机专业多媒体教程(数据结构、汇编、编译原理等)(13CD)
27、大学数学[离散数学线性代数概率与数理统计微积分]视频教程(22CD)
28、LearnKey Asp.Net (老外用英语讲课)(13CD)
29、LearnKey Asp.Net Webservice(老外用英语讲课)(5CD)
30、AppDev Asp.Net2.0 UsingC# (老外用英语讲课)(1CD)
31、APPDev .Net Framework(老外用英语讲课)(2CD)
32、林清安pro/e2001(野火版)视频教程(18CD)
33、深圳大学3D设计视频教程(4CD)
34、3DMAX建模视频教程(老外用英语讲课)(6CD)
35、3DMAX纹理与贴图材质灯光视频教程(老外用英语讲课)(5CD)
36、3DMAX格式500个常用模型库(4CD)
37、lightscape基础入门视频教程(2CD)
38、聚光制造(lightscape3.2入门与精通视频教程)(4CD)
39、coreldraw12中文版入门与精通swf格式视频教程(2CD)
 
把参数中的string类型换成shortstring类型试一下就OK了。
我也遇到过这样的问题的!
 
一般出现这个问题是访问没有创建的对象
 
后退
顶部