직렬화 된 데이터에서 디지털 페르소나 지문 템플릿 생성
-
05-07-2019 - |
문제
이것은 아마도 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);
제휴하지 않습니다 StackOverflow