RBA*_*RBA 3 delphi delphi-10.1-berlin
我正在努力处理一段简单的代码,即使很简单,我找不到解决方案.在某个方面,我有一个像这样的事件
OnReadMessageParameter(Self, aName, aTypeInfo, pointer(@aValue), [psIsTValue]);
Run Code Online (Sandbox Code Playgroud)
重要的是aValue参数,它是TValue类型.当这被称为aValue.IsObject时为true.为了处理来自它的数据,我已经为此事件分配了我的例程:
.DoOnReadMessageParameter(Sender: TROMessage; const aName: string;
aTypeInfo: PTypeInfo; const DataRef: pointer; Attributes: TParamAttributes);
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是,我已经尝试过几种方法将DataRef转换回TValue项:
var val: tvalue;
tvalue.Make(@DataRef^,TypeInfo(TValue),val);
or another attempt
val := TValue(@DataRef^);
Run Code Online (Sandbox Code Playgroud)
但IsObject属性为false.它一定是非常简单的东西,我错过了.任何的想法?
其中aValue是TValue,@ aValue是指向TValue结构的指针,而不是它包含的值.更好的设计是使OnReadMessageParameter事件将其DataRef参数键入TValue本身,而不是无类型指针.
但是,如果你无法控制它,你需要将DataRef转换为指向TValue的指针,然后遵循它 -
type
PValue = ^TValue;
var
val: TValue;
begin
val := PValue(DataRef)^;
Run Code Online (Sandbox Code Playgroud)