Questo è più un progetto che una domanda di implementazione. Sono a conoscenza di come integrare una DLL C ++ all'interno di un'app principale C # che funge da interfaccia grafica. Credimi che ho letto tutte le altre domande su argomenti simili, ma nessuno di loro risponde chiaramente alla mia domanda, quindi eccoci qui:
-
Ho una DLL C ++ con alcune funzioni che interagiscono con un'API con un altro sistema (scatola nera per me). La funzione che si collega all'API deve essere "viva" mentre l'intero programma è in esecuzione, altrimenti la connessione all'API viene persa e tutto diventa più difficile. Quindi, tenendo a mente che se chiamo la funzione "Connetti" nella DLL e poi torno al codice C #, il codice DLL sarà fuori dal contesto (non più in esecuzione), e si verificherà la disconnessione (correggimi se io ' m sbagliato per favore).
-
Finora sembra che quello di cui ho bisogno è:
a) Chiama le funzioni DLL C ++ usando P / Invoke come al solito
b) Disegna un meccanismo che mantiene la funzione DLL (comprese le chiamate ad altre funzioni all'interno della DLL sempre attive)
c) Ogni volta che il modulo DLL C ++ ha nuovi dati nuovi, richiama il C # e aggiorna tutti i dati necessari per la presentazione.
Sembra facile, ma non riesco a realizzare il progetto in modo che nessuno di loro resti bloccato. Ho provato ad usare loop infiniti nel lato C ++ DLL, ma poi la GUI si blocca. Se eseguo semplicemente una chiamata alla DLL ogni "x" secondi, quindi sto interrogando troppe volte inutili e la GUI diventa lenta e non elegante nell'aggiornamento. Inoltre, avendo la GUI come "master" e la DLL come "slave", si verifica una disconnessione a causa della DLL che interrompe l'esecuzione mentre si trova nel contesto del codice C #.
Non essere troppo duro con me ragazzi, so che ci deve essere un semplice problema di design che non sto considerando, ma non riesco a scoprire cosa sia. Sono nuovo su C #, non su C ++.
Inoltre, sarei grato se potessi suggerire un'altra soluzione per un caso in cui i dati di aggiornamento dal lato DLL sarebbero quasi in tempo reale, proprio come leggere la velocità istantanea di un veicolo in tempo reale.