参数是OleVariant,怎么处理?

wangbab 2004-07-19 09:11:32
procedure OpenStream(var vVideoPort: OleVariant; var vPciPort: OleVariant; bMinimized: Integer;
var nRetVal: SYSINT); safecall;
是引入的一个COM接口下的方法。
参数vVideoPort应该传一个record的的值。该Record的定义如下。

VRECT = packed record
nStartX: Integer;
nStartY: Integer;
nWidth: Integer;
nHeight: Integer;
end;

VelaPciPort = packed record
nFormat: VideoFormat;
nStreamType: VideoType;
nPitch: SYSINT; //integer
bVanityMode: Integer;
bUseMMU: Integer;
dwAddr: Integer;
nStreamRate: SYSINT;
pReserved0: Integer;
pReserved1: Integer;
VRECT: VRECT;
end;

VelaVideoPort = packed record
nPort: VideoPort;
nFrameRate: SYSINT;
FieldCtl: VelaFieldCtl;
VAcqRect: VRECT;
end;

下面是我的调用代码
var
tempVideoPort:VelaVideoPort;
tempPciPort:VelaPciPort;
begin
...//初始化tempPort,tempPciPort;;
Self.m_CVProServer.OpenStream(tempVideoPort,tempPciPort,0,nRetVal);
//但是编译报错。错误提示是Invalid typecast.
//到底怎么才能把一个Record传进去??
end;
...全文
204 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangbab 2004-07-19
  • 打赏
  • 举报
回复
谢谢,感谢老大的回复。
SeaWave 2004-07-19
  • 打赏
  • 举报
回复
用VarArrayCreate来把记录编组传递过去.....

type
TTest = packed record
a, b, c, d: Integer;
e, f: array[0..127] of Char;
end;

procedure Example;
var
test: TTest;
p: Integer;
v: Variant;
begin
//为test填值
//...
//...

// 将test中的内容传给v
v := VarArrayCreate([0,sizeof(test)-1], varByte);
p := VarArrayLock(v);
try
Move(test, p^, sizeof(test));
finally
VarArrayUnlock(v);
end;

// 调用接口方法
MyInterfaceObject.MyMethod(v);
end;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧