문제

이것은 아마도 Tumbleweed 배지를 얻을 수있는 매우 구체적인 질문이지만, 가능하다면 대답하십시오.

DigitalPersona SDK 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));
도움이 되었습니까?

해결책

Dessorialize 방법이 바이트 배열로 가득 찬 PDF 문서를 찾았습니다. 당신의 핑거 버퍼는 판사 르이며, 바이트 배열입니다. 그러나 올 스트링으로 자동 변환되는 문자열로 캐스팅합니다 (델파이는 올레비 리아 트로 할당 할 때 문자열을 올 스트링으로 변환합니다). 따라서 더 이상 바이트 배열이 없습니다.

당신이하려고 할 수있는 일 (나는 그것을 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