2009-10-22 5 views
2

Ceci est une question très spécifique qui me probablement gagner le badge Tumbleweed, mais s'il vous plaît répondre si vous le pouvezCréation modèle d'empreintes digitales persona numérique à partir des données sérialisés

J'ai dll importé DigitalPersona sdk est comme les bibliothèques de type dans Delphi et j'essaye de vérifier les empreintes digitales que j'ai stockées en tant que données sérialisées dans une base de données, cela fonctionne très awesomely. L'inscription semble fonctionner correctement, mais je ne peux pas retourner les données binaires des empreintes digitales dans les objets DPFPTemplate. Je continue d'obtenir une exception OLEException chaque fois que j'essaie d'utiliser la propriété defaultinterface d'un objet TDPFPTemplate. Je me demande comment Digital Persona s'attend à ce que vous utilisiez son SDK pour recréer des empreintes digitales. Voici ce que leurs instructions disent:

 
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. 

Toutes les façons de faire un DPFPTemplate semblent inclure uniquement à l'aide du lecteur d'empreintes digitales lui-même.

est ici d'une manière qui ne fonctionne pas

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

et voici une autre

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

Pourriez-vous apparaître un code pour nous aider à donner un indice? – ChrisBD

+0

Bonne idée, merci pour lookin. –

+1

Quel est le ErrorCode (HRESULT) renvoyé par EOleException? Et comme le dit ChrisBD, donnez du code. –

Répondre

2

J'ai trouvé un document pdf où la méthode Désérialise feaded un tableau d'octets. Votre FingerBuffer est un PAnsiChar, qui est un tableau d'octets. Mais ensuite vous le transtypez en une chaîne qui est automatiquement convertie en OleString (Delphi convertit une chaîne en OleString lorsque vous l'affectez à un OleVariant). Donc vous n'avez plus de tableau d'octets.

Ce que vous pouvez essayer de le faire (je ne GARANTISSONS it :)):

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

Wow, ça a marché, pas de crash. Merci beaucoup! –

Questions connexes