by sandro
5. January 2009 23:22
La DLL unmanaged
Dopo essere arrivati nella seconda parte a sfondare il confine del codice gestito, siamo arrivati in questa terza parte ad analizzare la DLL unmanaged che contiene tutta la logica di business che gestisce gli eventi provenienti da qualche driver. Vediamo subito il codice:
Come vediamo la funzione principale, richiamata dalla parte managed tramite Platform Invoke, si aspetta un puntatore a funzione con una firma ben precisa: un intero e una stringa in input e un intero in output. All'interno della funzione inseriamo il costrutto daemon a cui deleghiamo la costruzione di un thread apposito per effettuare il vero e proprio lavoro di listening degli eventi.
Il thread esegue la funzione "MyReceivingCallFunction". In maniera molto simbolica la funzione in questione dorme 6 secondi e poi termina. Al termine viene segnalato un oggetto su cui era rimasta in ascolto "ReadyToReceiveCall". La Wait in questione era una wait infinita, bloccante. Quando si sblocca, viene chiamato il metodo di callback, passandogli un intero ed una stringa. Da notare il metodo che viene utilizzato per poter passare una stringa alla parte managed.