从序列化数据创建数字角色指纹模板

时间:2009-10-22 14:01:59

标签: delphi activex fingerprint biometrics

这是一个非常具体的问题,可能会让我获得风滚草徽章,但如果可以,请回答

我已经将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.

制作DPFP模板的所有方法似乎只包括使用指纹识别器本身。

这是一种不起作用的方式

 Result := CreateOleObject('DPFPShrX.DPFPTemplate.1') as IDPFPTemplate;
 Result.Deserialize(string(AUserFinRecPtr.FingerBuffer));

这是另一个

DPFPTemplate := TDPFPTemplate.Create(nil);
DPFPTemplate.DefaultInterface.Deserialize(String(AUserFinREcPtr.FingerBuffer));

1 个答案:

答案 0 :(得分:2)

我找到了一个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);