oleVariant类型的数据怎么进行运算(20分)

  • 主题发起人 主题发起人 孤云
  • 开始时间 开始时间

孤云

Unregistered / Unconfirmed
GUEST, unregistred user!
调用VISSIM COM //VISSIM 软件
GetWindow ([out] VARIANT *Top, [out] VARIANT *Left, [out] VARIANT *Bottom, [out] VARIANT *Right)
在Delphi中调用GetWindow函数
VISSIM.GetWindow();
括号提示:
(Top:oleVariant;Left:oleVariant;Bottom:oleVariant,Right:oleVariant)
我想获取GetWindow()的Top,Left,Bouttom,Right的值,然后对这些值进行运算
算完在设置VISSIM.SetWindow();
procedure ok();
var
Top,Left,Bouttom,Right:oleVariant;
begin
VISSIM.GetWindow(Top,Left,Bouttom,Right);

//请问我怎么对得到的Top,Left,Bouttom,Right进行运算,谢谢!
VISSIM.SetWindow(Top,Left,Bouttom,Right);
end;
 
不知道行不行:
procedure ok();
var
Top, Left, Bouttom, Right: Integer;
begin
VISSIM.GetWindow(Top, Left, Bouttom, Right);
//对得到的Top,Left,Bouttom,Right进行运算
VISSIM.SetWindow(Top, Left, Bouttom, Right);
end;
 
运行时倒是没提示错误
但是得到的不是预期的结果
 
To 孤云:
得不到“预期结果”,原因有多种,您最好问您自己。例如:
1、GetWindow 中的参数是整型(Integer)还是浮点型(Float)?
2、您保证您的“运算”是正确的么?
3、这几个 Top,Left,Bouttom,Right 是绝对坐标还是相对于网格的坐标?
4、您口中所谓“不是预期的结果”,究竟哪里不是预期结果?
基本不知您所云。问问题是不是应该把问题表述清楚先?谢谢!
 
To vvyang
谢谢您的热心和直言不讳
 
To 孤云:
  不知您的问题解决了没有?
  VISSIM 听起来好象是个地理信息系统之类的东东,如果是那样的话,坐标一般都是浮点型的,您最好查查 VISSIM 的接口说明,好对症下药...
 
嗯,好的
VISSIM是交通流的仿真软件

函数的接口说明是:
GetWindow ([out] VARIANT *Top, [out] VARIANT *Left, [out] VARIANT *Bottom, [out] VARIANT *Right)

Parameters
[out] VARIANT *Top : the screen coordinate of the top edge
[out] VARIANT *Left : the screen coordinate of the left edge
[out] VARIANT *Bottom : the screen coordinate of the bottom edge
[out] VARIANT *Right : the screen coordinate of the right edge
 
1、不知这个 GetWindow 的 Delphi 声明是楼主翻译的还是 Delphi 自动生成的,看上去有点问题。VC 中声明的“VARIANT *Top” Top 参数是个指针,Delphi 中翻译过来必须在 Top 参数声明前加上“var”或“out”,这样传递的就是指针,或者不加“var”直接声明成指针也行;像楼主那样声明,不在参数前加任何东西,那传递的就是变量本身,而不是地址,VISSIM 会把这个 Top 变量的内容当作地址来用,内容和地址哪能一样,当然会不对。
2、重新声明一下接口试试:
procedure GetWindow(out Top, Left, Bottom, Right: OleVariant);

procedure GetWindow(var Top, Left, Bottom, Right: OleVariant);

procedure GetWindow(Top, Left, Bottom, Right: POleVariant);

procedure GetWindow(out Top, Left, Bottom, Right: Integer);

procedure GetWindow(var Top, Left, Bottom, Right: Integer);

procedure GetWindow(Top, Left, Bottom, Right: PInteger);
 
再次感谢vvyang对我的热心帮助,这个问题已基本解决
GetWindow ([out] VARIANT *Top, [out] VARIANT *Left, [out] VARIANT *Bottom, [out] VARIANT *Right)
是VISSIM COM接口说明书上的说明

在DELPHI中自动生成的是:
GetWindow(Top:oleVariant;Left:oleVariant;Bottom:oleVariant,Right:oleVariant)
都怪我没说清楚
 
To 孤云:
Delphi 自动生成的 Com 接口经常会出问题,我遇到过多次了,都是自己改了之后才能用。
你试试我的方法吧。
 
在Delphi的Tools→Environment→Options→Type Library→language→Pascal以后,以后在Type Library中显示的就是转换为Delphi的数据类型,这样就很容易理解了.

默认显示的是IDL类型,就是COM的那种,一般搞Delphi对那种格式会很不习惯.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
595
import
I
后退
顶部