如何使用OleVariant在方法中发送字节数组

时间:2019-07-17 20:59:14

标签: delphi-7 biometrics

如何在使用OleVariant的方法中发送字节数组?

这是方法:

procedure Import(bInitialize: Integer; nFingerID: Integer; nPurpose: Integer; 
nSrcFPDataType: Integer; nFPDataSize: Integer; FPData1: OleVariant; FPData2: OleVariant); safecall;

我们试图这样使用:

buftn: array[0..399] of byte;
// fill the buftn array... then
objFPData.Import(1,1,1,400,400,OleVariant(buftn));

但是它返回消息:“无效类型转换”

1 个答案:

答案 0 :(得分:1)

您不能在buftn内传递OleVariant字节数组本身。那与OLE不兼容,这就是为什么您遇到转换错误。

您必须在OleVariant内分配一个与OLE兼容的字节数组,然后可以将字节复制到其中,例如:

uses
  ..., Variants;

var
  buftn: array[0..399] of Byte;
  v: Variant;
begin
  // fill the buftn array...
  v := VarArrayCreate([Low(buftn), High(buftn)], varByte);
  Move(buftn, VarArrayLock(v)^, sizeof(buftn));
  VarArrayUnlock(v);
  objFPData.Import(1,1,1,400,400,v);
end;

或者:

uses
  ..., Variants;

var
  buftn: PByte;
  v: Variant;
begin
  v := VarArrayCreate([0, 399], varByte);
  buftn := PByte(VarArrayLock(v));
  // fill the buftn array...
  VarArrayUnlock(v);
  objFPData.Import(1,1,1,400,400,v);
end;