一个TList指针问题.昨天弄了一晚上都没有办法搞定,请高手帮忙.(100分)

  • 主题发起人 主题发起人 hhd85
  • 开始时间 开始时间
H

hhd85

Unregistered / Unconfirmed
GUEST, unregistred user!
昨天弄了一晚上都没有办法搞定,希望高手能帮一下.
我是用dll扩展exe功能时出的问题.
在exe里有一个TAbc类,
TAbc = record
str: string;
lList: TList;
end;
abc : TAbc;
我用dll钩子挂钩到exe上,用定义的指针操作exe的abc.如下
TDll = record
str: string;
lList: TList;
end;
Dll : ^TDll;
我用dll指针来操作exe的abc.
使用
dll^str := '123';
可以正确操作abc类中的str,但使用dll^lList.Add(Point)就出错.
地址绝对正确 dll^lList.count也可以正确读取.但就是不能 add.
请高手帮一下.
 
exe中的 List 是创建过的 abc.lList:= TList.Create
我在dll中是用指针操作,不再需要创建了吧.
 
呵呵,不会是ShareMM没加上吧
 
我在dll用 Dll^.lList := TList.Create
创建后,不出错,但exe中的 lList都不能正常使用.
 
老大,不能这样做哦,

DLL 跟 Exe 的基地址的不同的哦, 不仅要用 内存共享,

三言两语说不清,你给出email,我给demo给你
 
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
需要用到ShareMem 和 BORLNDMM.DLL
 
to 楼上,ShareMem 并不是万能的

Abc.LList:=TList.Create;
Dll.LList:=Abc.LList;

Abc.LList.Add(xxx);
Dll.LList.Add(YYY);

abc 与Dll实际上是操作同一块内存
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
795
import
I
I
回复
0
查看
676
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部