2

これは非常に具体的な質問で、おそらくタンブルウィード バッジを獲得できますが、できる場合は回答してください

DigitalPersona sdk dll をタイプ ライブラリとして Delphi にインポートし、シリアル化されたデータとしてデータベースに保存した指紋を検証しようとしていますが、非常にうまく機能しています。登録はうまくいっているようですが、指紋のバイナリ データを DPFPTemplate オブジェクトに戻すことができません。TDPFPTemplate オブジェクトの defaultinterface プロパティを使用しようとするたびに、OLEException が発生し続けます。

私が疑問に思っているのは、Digital Persona が SDK を使用してフィンガープリントを再作成する方法を期待していることです。これは彼らの指示が言うことです:

1. *指紋データ ストレージ サブシステムからシリアル化された指紋テンプレート データを取得します。
2. Deserialize メソッドを呼び出して、DPFPTemplate オブジェクトを逆シリアル化します (VB 40 ページ、C++
83ページ)。
3. DPFPTemplate オブジェクトを返します。

DPFPTemplate を作成するすべての方法には、指紋リーダー自体の使用のみが含まれているようです。

これがうまくいかない方法の1つです

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

そしてここに別のものがあります

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

1 に答える 1

2

Deserialize メソッドがバイト配列にフィードされている pdf ドキュメントを見つけました。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);
于 2009-10-22T17:27:31.383 に答える