这是一个非常具体的问题,可能会让我获得风滚草徽章,但如果可以的话请回答
我已经将 DigitalPersona sdk dll 作为类型库导入到 Delphi 中,并尝试验证我作为序列化数据存储在数据库中的指纹,它工作得非常好。注册似乎工作正常,但我无法将指纹中的二进制数据转回 DPFPTemplate 对象。每次尝试使用 TDPFPTemplate 对象的 defaultinterface 属性时,我都会收到 OLEException。
我想知道 Digital Persona 如何期望您使用他们的 SDK 来重新创建指纹。他们的指示是这样说的:
1. *Retrieve serialized fingerprint template data from a fingerprint data storage subsystem.
2. Deserialize a DPFPTemplate object by calling the Deserialize method (VB page 40, C++
page 83).
3. Return a DPFPTemplate object.
制作 DPFPTemplate 的所有方法似乎只包括使用指纹读取器本身。
这是一种行不通的方法
Result := CreateOleObject('DPFPShrX.DPFPTemplate.1') as IDPFPTemplate;
Result.Deserialize(string(AUserFinRecPtr.FingerBuffer));
这是另一个
DPFPTemplate := TDPFPTemplate.Create(nil);
DPFPTemplate.DefaultInterface.Deserialize(String(AUserFinREcPtr.FingerBuffer));
我找到了一个 pdf 文档,其中 Deserialize 方法被输入一个字节数组。您的 FingerBuffer 是一个 PAnsiChar,它是一个字节数组。但随后您将其转换为一个字符串,该字符串会自动转换为 OleString(当您将字符串分配给 OleVariant 时,Delphi 会将其转换为 OleString)。所以你不再有字节数组了。
你可以尝试做什么(我不会保证:)):
var
lByteArray: Variant;
lArrayPointer: Pointer;
lStr: AnsiString;
DPFPTemplate: TDPFPTemplate;
begin
lStr := AUserFinREcPtr.FingerBuffer;
lByteArray := VarArrayCreate([0, Length(lStr) - 1], varByte );
lArrayPointer:= VarArrayLock(lByteArray);
try
Move( lStr[1], lArrayPointer^, Length(lStr) );
finally
VarArrayUnlock(lByteArray);
end;
DPFPTemplate := TDPFPTemplate.Create(nil);
DPFPTemplate.DefaultInterface.Deserialize(lByteArray);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)