إنشاء قالب شخصية بصمة الرقمية من البيانات المتسلسلة

StackOverflow https://stackoverflow.com/questions/1607441

سؤال

<ط> هذا هو سؤال محدد جدا والتي من المحتمل أن تكسب لي شارة tumbleweed، ولكن يرجى الإجابة إذا استطعت

ولقد استوردت في دلل DigitalPersona الإستراحة مكتبات نوع في دلفي وأسعى للتحقق من البصمات التي كنت المخزنة على البيانات المتسلسلة في قاعدة بيانات، انها تعمل بذهول جدا. يبدو التحاق للعمل بشكل جيد، ولكن لا أستطيع تشغيل البيانات الثنائية من بصمات الاصابع العودة إلى أشياء DPFPTemplate. وأظل الحصول على OLEException في كل مرة أحاول أن استخدام الخاصية defaultinterface لكائن TDPFPTemplate.

ما أنا أتساءل كيف تتوقع الرقمية المعوقين لك استخدام 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));
هل كانت مفيدة؟

المحلول

ولقد وجدت وثيقة قوات الدفاع الشعبي حيث feaded طريقة إلغاء تسلسل صفيف بايت. 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top