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和EXE是两份不同的运行时.
解决方案.DLL和EXE全部都是带包运行.所有的第三方控件都带运行时包运行.
 
那该怎么处理????
现在的问题是做测试的时候只用了TButton,可还是不行???
 
踢一脚

看看高高手来Show一下
 
由于DLL中的RTTI与主程序中的RTTI信息是不同的,所以即使是同一类型也
认为不同类,所以会发生这种事情。
看看以前的帖子,和你的情况差不多:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=601487
 
最终的解决方案:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3721955
 
后退
顶部