gpt4 book ai didi

c++ - Delphi COM 将 ByteArray 作为 OleVariant 传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:39 25 4
gpt4 key购买 nike

我正在通过 COM 连接指纹读取器,我需要帮助将 VB.NET 和 C++ 代码转换为 Delphi。

API 以 olevariant 作为参数:

Function FingerPrint.GetData(var ImageData : OleVariant) : WordBool;

提供了 VB.NET 示例:

Dim imgData() as Byte
ReDim imgData(fingerPrint.ImageSize) as Byte

If fingerPrint.GetData(imgData) = True Then
'Success
End If

提供的 C++ 示例:

BYTE* dataBuff = new BYTE[fingerPrint.ImageSize];
VARIANT imgData;

imgData.vt = VT_BYREF|VT_UI1;
imgData.pbVal = dataBuff;

if(fingerPrint.getData(imgData) == TRUE) {
//Success
}

这是我的德尔福代码:

procedure GetImgData();
var varBuffer : OleVariant;
imgBuff : PByteArray;
begin
GetMem(imgBuff, fingerPrint.ImageSize);

try
tagVariant(varBuffer).vt := VT_UI1 or VT_BYREF; // 0x4011
tagVariant(varBuffer).pbVal := Pointer(imgBuff);

if fingerPrint.getData(varBuffer) then
begin
// success
end;
finally
FreeMem(imgBuff);
end;
end;

另一种方法:

procedure GetImgData();
var varBuffer : OleVariant;
tagV : TVariantArg;
imgBuff : PByteArray;
begin
GetMem(imgBuff, fingerPrint.ImageSize);

try
tagV.vt := VT_UI1 or VT_BYREF; // 0x4011
tagV.pbVal := Pointer(imgBuff);

varBuffer := OleVariant(tagV);

if fingerPrint.getData(varBuffer) then
begin
// success
end;
finally
FreeMem(imgBuff);
end;
end;

getData 没有使用我发送的参数返回 true。发送我的可执行文件以支持并告诉我 API 正在获取 0x400C(VT_VARIANT 或 VT_BYREF)而不是 0x4011。

我的代码有什么问题吗?

请帮忙!

更新:

这里是调度接口(interface)

function GetData(var ImageData: OleVariant): WordBool; dispid 23;

来自组件包装器

..
function GetData(var ImageData : OleVariant): WordBool;
..
function TFingerPrint.GetData(var ImageData : OleVariant): WordBool;
begin
Result := DefaultInterface.GetData(ImageData);
end;

C++声明

BOOL getData(const VARIANT FAR& imgData)

更新 20140313

我们的供应商发送了新的 OCX 来处理从德尔福收到的数据。

最佳答案

你确定它是 0x4011 而不是 0x2011 吗?因为 varArray = $2000VarArrayCreate([0,size-1],varByte) 会像 V​​B 代码一样创建一个带有 varByte 数组的 OleVariant。如果可行,请使用 VarArrayLockVarArrayUnlock 访问数据。

关于c++ - Delphi COM 将 ByteArray 作为 OleVariant 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22344907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com