vb->delphi 关于类型的声明(100分)

  • 主题发起人 主题发起人 yaojiaqing
  • 开始时间 开始时间
Y

yaojiaqing

Unregistered / Unconfirmed
GUEST, unregistred user!
这是vb的声明:
Declare Sub MQPUTAny Lib "MQM.DLL" Alias "MQPUTstd@32" (ByVal Hconn As Long, ByVal Hobj As Long, MsgDesc As MQMD, PutMsgOpts As MQPMO, ByVal BufferLength As Long, Buffer As Any, CompCode As Long, Reason As Long)

请大家注意这几个字:Buffer As Any, 我靠 any ,也就是说什么都行。
我把它转成delphi, 类似这样: buffer pointer,或者 buffer variant , 可是都无法得到正确的结果。

到底应该怎么在delphi中把这个东西说清楚呢?

 
应该就是一个pointer
 
这个buffer实际上是对应几个不同的记录类型,我用pointer 大概如此:

example:

type
rec1=packed record
s1:string;
r1:rec2;
......
end;

调用时:
var
b1:rec1;
pb1:^rec1;
str1:String;
begin
b1.s1:=....(设置b1的值);
........
pb1:=@b1;
MQPUTAny(.....pb1............)
(调用过程)
str1:=pb1^.s1;(可是并不能取得具体的值)
end;

大家看看问题在什么地方?
 
能不能这样
p:pointer;
MQPUTAny(.....p............)

rec1(p^).s1
把指针强行转化
提供个思路
大家讨论
 
可否在具体些
 
我认为Buffer As any类似于delphi的var buffer,也就是说:
procedure MQPUTAny (...,...,..., var Buffer,... )

调用的时候直接用你定义的rec1就可以了,不是指针。

另外,我看你定义的记录里面用到了string,估计会有问题,其它语言不会支持
delphi的string类型的,要小心!


 
Basic中的Any 是为了不进行类型检查,理解这指针也可以.
关键在于以下两个记录类型:
MsgDesc As MQMD, PutMsgOpts As MQPMO
 
多人接受答案了。
 
后退
顶部