Possiamo mettere funzione di callback all'interno dll?
-
09-10-2019 - |
Domanda
Sto cercando di utilizzare metodi SerialPort .Net da un altro programma che utilizza il motore Unity3D.
Ho una libreria di classi C # (DLL) che registro e implementare una funzione di callback quando la porta seriale riceve alcuni dati.
public CSerialDll()
{
_serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
}
void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int bytes = _serial.BytesToRead;
_comBuffer = new byte[bytes];
_serial.Read(_comBuffer, 0, bytes);
Console.WriteLine("data recv: " + System.Text.ASCIIEncoding.ASCII.GetString(_comBuffer));
}
E poi nel mio altro programma, ho creare un'istanza della classe.
Vorrei sapere se la mia chiamata indietro serial_DataReceived all'interno della libreria (DLL) sarà chiamato o no. Sto cercando di leggere _comBuffer all'interno della libreria da un altro programma ed è sempre vuota (anche se i dati sono venuta quando ho provato con una console app all'interno della stessa app).
Ogni aiuto è molto apprezzato.
Grazie
Soluzione
<HUNCH>
Se fossi un designer di classe, vorrei mettere i dati nella richiamata, quindi, se si guarda alla classe di SerialDataReceivedEventArgs
, vedrai che al suo interno è si buffer con i dati.
Quindi, dopo aver ottenuto un evento, e quindi chiamare leggere, in realtà scartare i dati che vengono inviati a voi e la richiesta di più.
In altre parole, sì, il fatto che è una libreria esterna non ha nulla a che fare con il fatto che non funziona come dovrebbe.
</HUNCH>
Altri suggerimenti
Non c'è niente di particolarmente speciale in genere sui metodi di essere in una DLL separata, finché modificatori di accesso siano impostate correttamente.
Tuttavia a seconda di come si imposta la soluzione può essere un dolore avendo cura di avere l'ultima DLL nella cartella bin.