高手请进:OLEVariant+指针的问题!!(100分)

  • 主题发起人 主题发起人 awingleaf
  • 开始时间 开始时间
A

awingleaf

Unregistered / Unconfirmed
GUEST, unregistred user!
我调用一个vc做的Activex,一个函数的返回值为olevariant型,代表一个自定义结构的指针。
可是我却无法得到这个指针!!
var
ct:TRSJHmonitor; //自定义结构的指针型;
p:OleVariant;
pt: Pointer;
begin
p := CmdStrmRecvM1.GetMoniterInfo;
× ct := TRSJhmonitor(p);

TVarData(p).VType :=varUnknown;
//×ct:=TRSJHmonitor(TVarData(p).varUnknown);
//×TVarData(ct).VType := p; ×
//×ct := TRSJhmonitor(p); ×
//×pt := p; ×
我怎么才能把p付给ct呢??
 
var
ct:TRSJHmonitor; //自定义结构的指针型;
p:PVariant;
pt: Pointer;
begin
p := CmdStrmRecvM1.GetMoniterInfo;

//p^.VType :=varUnknown;我觉得不用这句
ct:=TRSJHmonitor(TVarData(p).varUnknown);
//×TVarData(ct).VType := p; ×
//×ct := TRSJhmonitor(p); ×
//×pt := p; ×
我怎么才能把p付给ct呢??
 
djdsz,
还是不行,报错!![?]
 
p := CmdStrmRecvM1.GetMoniterInfo;

ct:=p;
 
关注。向上顶。
 
不知, 这样行不行
var
ct:TRSJHmonitor; //自定义结构的指针型;
p:OleVariant;
pt: Pointer;
begin
p := CmdStrmRecvM1.GetMoniterInfo;
pt := pointer(p);
ct := pt^;
...
end;
 
既然已经知道返回值是个指针了,就没有必要用OleVariant这种万能的类型了,用整形就可以。
如果是VC的ActiveX已经改不了了,那就直接把OleVariant值以整数形式赋值给一个指针就行。
var
ct:TRSJHmonitor; //自定义结构的指针型;
i: Integer;
begin
i := CmdStrmRecvM1.GetMoniterInfo;
ct := Addr(i);
...
 
p:OleVariant;
P 是一种类型,就想integer一样。他不是类也不是结构
他是一种可变体,所有你的P^.***都是错误的
 
多人接受答案了。
 

Similar threads

回复
0
查看
863
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
694
import
I
I
回复
0
查看
606
import
I
后退
顶部