SOS,关于调用DLL建立TREEVIEW的致命问题!!!

zdzconquer 2003-06-27 10:35:19
本人在编程中遇到了这样一个问题:在应用程序TESTDLL中1个FORM上建立1个空的树TV (TTREEVIEW控件),
再建立1个动态链接库,动态生成树状控件的内容, 控件可以生成,也能有效的工作,但在退出FORM或释放动态库时
,出现这样的错误:
Project TestDll.exe raised exception class EAccessViolation with message
'Access violation at address 00408D67 in module 'testdll.exe'.read of address
010AAF54. PROCESS stopped. use step or run to continue.

我估计是在动态库中建立的数据,外部程序无法访问造成的,但经过两天的摸索,也未能找出解决的办法,此程序
在工作中急用,因此求各位智者/大侠帮帮忙,在线等待,一解决就加分.以下是经简化的程序:

以下是主程序:

unit untTestDll;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ImgList, ComCtrls, Ora, OraSmart, DB, DBAccess, Inifiles;

type
TfrmTest = class(TForm)
Button1: TButton;
tv: TTreeView;
ImageList1: TImageList;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmTest: TfrmTest;
libHandle: THandle;
implementation

{$R *.dfm}

procedure TfrmTest.Button1Click(Sender: TObject);

var
BuildTree: procedure(TV: TTreeView; ChildName: String); stdcall;
begin
libHandle := loadlibrary('JXDTGL.DLL');
if libHandle > 0 then
begin
@BuildTree := GetprocAddress(libHandle, 'BuildTree');
if @BuildTree <> nil then
begin
BuildTree(tv,'根结点');
end;
end;
end;


procedure TfrmTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(libHandle);
end;

end.

以下是动态库

library Jxdtgl;

uses
System, SysUtils, Classes, Ora, OraSmart, IniFiles, Windows, ComCtrls,Dialogs;

{$R *.res}

//建树
procedure BuildTree(TV: TTreeView; ChildName: string); stdcall;
var
PNode: TTreeNode;
begin
PNode := TV.Items.AddChild(nil, ChildName);
end;

exports
BuildTree;

begin
end.
...全文
72 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ounettiger 2003-07-12
  • 打赏
  • 举报
回复
我也遇到了同样的问题,请问此问题解决了没有?
lion_lh 2003-06-27
  • 打赏
  • 举报
回复
参数类型string改pchar
outer2000 2003-06-27
  • 打赏
  • 举报
回复
procedure BuildTree(TV: TTreeView; ChildName: pchar///); stdcall;
zdzconquer 2003-06-27
  • 打赏
  • 举报
回复
我想问题在于无法释放在DLL中创建的treenode对象,因我跟踪过,是在释放TREENODE对象时出的以上错误,我想是因为程序无法访问DLL中创建的对象的地址,但不知如何解决这个问题
sukaka 2003-06-27
  • 打赏
  • 举报
回复
是否dll中申请的资源未释放 例如stringlist或者其他需要手工释放的东东
zdzconquer 2003-06-27
  • 打赏
  • 举报
回复
各位大侠, 是我将参数类型写错了应是PCHAR,问题不在这里,请继续讨论...

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧