2009-10-22 2 views
2

이 아마 나에게 다니지 배지를 얻을 수 있지만, 답변을하시기 바랍니다 것입니다 매우 구체적인 질문에서 디지털 성격의 지문 템플릿을 생성하면 할 수 있습니다 내가 델파이에 형식 라이브러리로 DigitalPersona의 SDK DLL이의를 가져온는 직렬화 된 데이터

데이터베이스에 직렬화 된 데이터로 저장 한 지문을 확인하려고 시도하고 있는데, 매우 힘들게 작동합니다. 등록이 제대로 작동하는 것처럼 보이지만 지문의 이진 데이터를 DPFPTemplate 개체로 되돌릴 수는 없습니다. TDPFPTemplate 객체의 defaultinterface 속성을 사용하려고 할 때마다 OLEException이 계속 발생합니다.

Digital Persona가 자신의 SDK를 사용하여 지문을 재생성하는 방법이 궁금합니다. DPFPTemplate을 만드는

 
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. 

모든 방법은 지문 인식기 자체를 사용하여 포함하는 것 : 이것은 감독의 지시 말하는 것입니다.

여기

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

를 작동하지 않는 한 방법과 여기에 내가 역 직렬화 메소드는 바이트 배열을 feaded 된 PDF 문서를 발견 다른

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

당신이 몇 가지 코드를 팝업 할 수 우리에게 단서를 얻을 수 있도록? – ChrisBD

+0

좋은 생각, 찾아 주셔서 감사합니다. –

+1

EOleException가 반환하는 ErrorCode (HRESULT)는 무엇입니까? ChrisBD가 말했듯이, 몇 가지 코드를 제공하십시오. –

답변

2

을합니다. FingerBuffer는 PAnsiChar이며 바이트 배열입니다. 그런 다음 문자열을 OleString (OleVariant에 할당하면 Delphi가 문자열을 OleString으로 변환 함)로 자동 변환됩니다. 따라서 더 이상 바이트 배열이 없습니다.

당신은 (내가 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); 
+1

와우. 엄청 고마워! –