1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
public static BioAPI_RETURN BioAPI_Identify(
BioAPI_HANDLE ModuleHandle, // [in]
ref BioAPI_FAR MaxFARRequested, // [in]
ref BioAPI_FRR MaxFRRRequested, // [in/optional]
ref BioAPI_BOOL FARPrecedence, // [in]
ref BioAPI_IDENTIFY_POPULATION Population, // [in]
BioAPI_BOOL Binning, // [in]
uint MaxNumberOfResults, // [in]
ref uint NumberOfResults, // [out]
ref BioAPI_CANDIDATE [] Candidates, // [out]
int Timeout, // [in]
ref BioAPI_BIR_HANDLE AuditData) // [out/optional]
{
BioAPI_RETURN bReturn = BioAPI_RETURN.BioAPI_OK;
IntPtr ptrMaxFRRRequested = IntPtr.Zero;
IntPtr ptrCandidates = IntPtr.Zero;
IntPtr ptrAuditData = IntPtr.Zero;
if (MaxFRRRequested >= (BioAPI_FRR) 0)
{ ptrMaxFRRRequested = BioAPIWin32.MarshalInt32((int) MaxFRRRequested); }
if (AuditData >= (BioAPI_BIR_HANDLE) 0)
{ ptrAuditData = BioAPIWin32.MarshalInt32((int) AuditData); }
try
{
bReturn = BioAPIWin32.BioAPI_Identify(
ModuleHandle, // [in]
ref MaxFARRequested, // [in]
ptrMaxFRRRequested, // [in/optional]
ref FARPrecedence, // [in]
ref Population, // [in]
Binning, // [in]
MaxNumberOfResults, // [in]
ref NumberOfResults, // [out]
ptrCandidates, // [out]
Timeout, // [in]
ptrAuditData); // [out/optional]
}
catch (Exception ex)
{
Console.WriteLine ("BioAPIWin32.BioAPI_Identify Exception: \n\tError Message = " + ex.Message);
return bReturn;
}
if (ptrAuditData != IntPtr.Zero) { }
if (ptrMaxFRRRequested != IntPtr.Zero) Marshal.FreeCoTaskMem( ptrMaxFRRRequested );
Console.WriteLine("ok");
IntPtr ptrCandidate = Marshal.ReadIntPtr(ptrCandidates, 0);
Console.WriteLine("ok");
if (ptrCandidate != IntPtr.Zero)
{
int len = 0;
BioAPI_CANDIDATE_Marshal [] mCandidates = new BioAPI_CANDIDATE_Marshal[NumberOfResults];
Candidates = new BioAPI_CANDIDATE[NumberOfResults];
IntPtr ptrNext = ptrCandidate;
for (int i = 0; i < NumberOfResults; i++)
{
mCandidates[i].DoUnmarshal(ptrNext, ref len, false);
Candidates[i] = new BioAPI_CANDIDATE();
mCandidates[i].Unmarshal(Candidates[i], true);
ptrNext = new IntPtr(ptrNext.ToInt32() + len);
}
}
if (ptrAuditData != IntPtr.Zero)
{ AuditData = (BioAPI_BIR_HANDLE) BioAPIWin32.UnmarshalInt32(ptrAuditData, true); }
return bReturn;
} |
Partager