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中就不麻烦大家了
奇怪的是,在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中就不麻烦大家了