#include <stdio.h> #include <stdlib.h>
#include "FSSMLibrary.h" #include "win2nix.h"
int main() { void* fssmLibHandle = NULL; int (*listScannersFunc)(FSSMScanner*, size_t*); int (*getFingerprintFunc)(FSSMScanner, unsigned char*, size_t*, size_t*, unsigned int); size_t fingerprintSizeWidth = 0, fingerprintSizeHeight = 0; FSSMScanner* scannersList = NULL; size_t scannersCount = 0; int scannerNumber = 0; int rv = 1;
// Загрузка библиотеки FSSM printf("Loading FSSM library \n"); fssmLibHandle = LoadLibrary(FSSM_LIB);
if (!fssmLibHandle) { printf("Library load error!\n");
return rv; }
printf("OK!\n");
// Загрузка необходимых методов printf("Loading FSSM functions \n"); listScannersFunc = (int (*)(FSSMScanner*, size_t*))GetProcAddress(fssmLibHandle, "listScanners");
if (!listScannersFunc) { printf("listScanners finction not found!\n"); goto releaseLibrary; }
getFingerprintFunc = (int (*)(FSSMScanner, unsigned char*, size_t*, size_t*, unsigned int))GetProcAddress(fssmLibHandle, "getFingerprint");
if (!getFingerprintFunc) { printf("getFingerprint finction not found!\n");
goto releaseLibrary; }
// Получение списка сканеров rv = listScannersFunc(NULL, &scannersCount);
if (rv != 0) { printf("Function listScanners finished with error:%d!\n", rv);
goto releaseLibrary; }
printf("OK!\n"); printf("Found %3zu scanners!\n", scannersCount);
if (scannersCount == 0) { goto releaseLibrary; }
scannersList = (FSSMScanner*)malloc(scannersCount * sizeof(FSSMScanner)); rv = listScannersFunc(scannersList, &scannersCount);
if (rv != 0) { printf("Function listScanners finished with error:%d!\n", rv);
goto freeScannersMemory; }
for (int i = 0; i < (int)scannersCount; i++) { printf("%d. %s, id: %d \n", (i + 1), scannersList[i].type, scannersList[i].ID); }
// Выбор сканера printf("Enter scanner number: "); scanf("%d", &scannerNumber); scannerNumber--;
if (scannerNumber < 0 || scannerNumber >= (int)(scannersCount)) { printf("Invalid scanner number!\n");
goto freeScannersMemory; }
// Получение отпечатка // Запрос размера отпечатка со сканера rv = getFingerprintFunc(scannersList[scannerNumber], NULL, &fingerprintSizeWidth, &fingerprintSizeHeight, 10000);
if (rv != 0) { printf("Function getFingerprint (get size) finished with error:%d!\n", rv);
goto freeScannersMemory; }
// Выделение памяти, считывание отпечатка unsigned char* fpImage = (unsigned char*)malloc(fingerprintSizeWidth * fingerprintSizeHeight); printf("Place your finger on the selected scanner within 10 seconds.\n"); rv = getFingerprintFunc(scannersList[scannerNumber], fpImage, &fingerprintSizeWidth, &fingerprintSizeHeight, 10000);
if (rv == 2) { printf("Timeout expired!\n");
goto freeFingerprintMemory; } else if (rv != 0) { printf("Function getFingerprint finished with error:%d!\n", rv);
goto freeFingerprintMemory; }
printf("Got fingerprint, %d bytes\n", (int)(fingerprintSizeWidth * fingerprintSizeHeight));
// Освобождение ресурсов freeFingerprintMemory: free(fpImage);
freeScannersMemory: free(scannersList);
releaseLibrary: FreeLibrary(fssmLibHandle); return rv; } |