创建从串行数据数字人的指纹模板(Creating digital persona fingerpri

2019-08-31 11:00发布

我已经导入SDK的DigitalPersona DLL的类型库导入Delphi中,我试图验证我已经存储在数据库中的序列化数据的指纹,它的工作非常赫然。 招生似乎很好地工作,但我不能把从指纹的二进制数据回DPFPTemplate对象。 每次我试图用一个TDPFPTemplate对象的defaultinterface财产的时间我不断收到OLEException。

我想知道是数字人如何希望你使用他们的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));

Answer 1:

我发现其中Deserialize方法被feaded一个字节数组PDF文档。 您的FingerBuffer是PAnsiChar,这是一个字节数组。 但随后你将它转换为被自动转换成OleString(德尔福字符串转换为OleString当你把它分配给一个OleVariant)的字符串。 所以,你没有字节数组了。

你可以试着做(我不会garantee吧:)):

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);


文章来源: Creating digital persona fingerprint template from serialized data