Ho dato un'occhiata alla documentazione e dire che fa schifo è un complimento.
Comunque non sei obbligato a rendere tutto static, dovrebbe bastare un puntatore.
codice:
class fingerprint {
    static fingerprint* pointer;
    
    fingerprint::fingerprint();
    fingerprint::~fingerprint();

     static void CALLBACK StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event);

     void WriteEvent(char* idSensor, int eventCode);

 };
 static fingerprint* pointer(0);
Ovviamente Il puntatore dovrà essere valido prima di poterlo usare.
codice:
void CALLBACK fingerprint::StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event) {
   if (!fingerprint::pointer) throw catastrophic_failure;
   fingerprint::pointer->WriteEvent(idSensor, evento_ricevuto);
}


fingerprint::pointer = new fingerprint;
GrCapInitialize(&fingerprint::StatusEventHandler);
delete fingerprint::pointer;