Hello overflow dello stack: a volte lettore, poster prima volta.IPC tra python app e DLL iniettata
Background:
di dialogo di Windows in esecuzione XP SP3, che sarà presto aggiornato a Windows Seven (MSDNAA < 3)
ho un DLL iniettato che ottiene cicli agganciando una funzione che si chiama migliaia di volte al secondo.
Mi piacerebbe comunicare/controllare questa DLL tramite un'applicazione python. Fondamentalmente, la DLL fa il lavoro, l'app python fornisce il cervello/il processo decisionale.
Il mio piano di gioco per fare ciò, è che avrei un contatore e un'istruzione if nella DLL. Ogni volta che viene chiamata la funzione hooked, counter ++ e quindi torna alla funzione originale fino a qualcosa come if (counter == 250) {// dostuff(); }. Il mio dietro a questo consentirà all'app di destinazione di funzionare senza impedimenti, ma mi consentirà comunque di fare cose interessanti.
Problema:
Sono ad una perdita totale del metodo IPC dovrei usare per fare la comunicazione. Abbiamo prese, memoria condivisa, pipe, filemapping (?), RPC e altre cose (apparentemente) esoteriche come scrivere negli appunti.
Non ho MAI implementato alcun tipo di IPC oltre gli esempi di giocattoli.
Sono abbastanza sicuro ho bisogno di qualcosa che:
- in grado di gestire a parlare avanti e indietro tra Python e una DLL
- non blocca/aspettare
- possibile controllare per l'attesa dei dati, e continuare se non v'è alcuna
- Se le serrature sono coinvolti, può continuare invece di aspettare
- non costa un sacco di tempo a/lettura e scrittura troppo
Aiuto? Grazie per il vostro tempo, spero di aver fornito informazioni generali sufficienti e di non aver infranto le convenzioni accettate.
Vorrei aggiungere che la relativa casella delle domande è molto interessante e l'ho esaminata prima di postarla.
L'utilizzo di un file di registro è * non * un IPC. – ulidtko
@ulidtko Il file system è la più antica e affidabile forma di sincronizzazione IPC. Ecco perché lo standard POSIX ha la stessa API per tutte le forme di IPC. Poiché il sistema operativo ** deve ** gestire la coerenza e la sincronizzazione nelle operazioni del file system (o non essere chiamato un sistema operativo), il file system è l'implementazione più semplice di IPC da utilizzare per programmi non OS. Prova 'ls/var/run/*.pid' la prossima volta che si ha accesso a un sistema * nix. – Apalala
La stampa è una forma ancora più vecchia e affidabile di ... memorizzazione di informazioni su carta. Il sistema operativo ** deve ** gestire la coerenza di ciò che verrebbe stampato e ogni essere umano può gestire tutta la sincronizzazione necessaria. Perché non proverai a stampare un "Ciao mondo!" su carta, quindi esegui la scansione e l'OCR per controllare il tuo programma? Ci dispiace, ma il tuo commento non è solo un argomento. Le stampanti devono stampare documenti, i filesystem devono memorizzare i file, shmem-pipes-sockets dovrebbe fornire i modi per fare IPC. – ulidtko