RTTI 在 DLL中不能使用? 请高高手也关注一下 ( 积分: 200 )

  • 主题发起人 主题发起人 skaly
  • 开始时间 开始时间
S

skaly

Unregistered / Unconfirmed
GUEST, unregistred user!
我做一程序的时候想在DLL中使用RTTI来取得控件的信息,控件由调用者传入
奇怪的是,在EXE中运行正常的代码,到了DLL中就不行了?怎么回事情能?
请大家看一下?
代码如下:

function GetObjectInfo(sObject: pByte): integer
stdcall;
type
pObj = ^TObject;
var
obj : TObject;
List : {PPropList
//} TPropList;
PropInfo : PPropInfo;
Count, i : integer

sBuf, sLine : string;
begin
obj := pObj(sObject)^

sBuf := '';
try
Count := GetPropList(obj.ClassInfo, tkAny, @List[0]);
//试过几种方式了,包括分配内存的方式
for I := 0 to Count - 1 do
begin
PropInfo := List;
sLine := VarToStr(GetPropValue(obj, PropInfo^.Name, True));
//多调用几次后,在PropInfo^.Name='Constraints' 的时候会出错
sBuf := sBuf + PropInfo^.Name + #13#10 + sLine + #13#10;
end;
finally
end;
end;

//如果只调用一次,在退出程序的时候也会出错………
我怀疑是DLL与EXE某种环境不同引起的,但是不知道怎么调试才明白,RTTI的几处核心代码都是汇编的说……

郁闷啊…
有想知道其他情况的,可以随时提出……

有请大家帮忙看看,分不是问题………
必须在DLL中使用,在EXE中就不麻烦大家了
 
你的DLL带包编译没有! 如果没有请试带delphi的包vcl, rtl 包编译看看
 
怎么带???
带不来

如果是说 Use Debug DCUs 的话,是没有用处的
 
踢一脚

看看高高手来Show一下
 
不是有一个 build with packet 吗? 勾上他把那些包放进去就可以了
 
是吗?我测试一下正确就发分了
 
build with packet 以后,你发布程序也要带运行时包的,否则程序不能正常运行。

由于DLL中的RTTI与主程序中的RTTI信息是不同的,所以即使是同一类型也
认为不同类,所以会发生这种事情。
看看以前的帖子,和你的情况类似,估计应该能解决你的问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=601487
 
感谢kk2000给出的提示!
但是build with packet是一个不严谨的解决方案
而且也有问题存在!
不过,启发了我的思路:
使用ShareMem
OK
一切问题都搞定了

感谢ufo!
 
后退
顶部