Domanda

Sono programmatore C #, e non presento con i nativi. Ho un nativo DLL, e I'v da utilizzare che nel mio progetto, ma causano alcuni dei tipi sono impraticabili in codice gestito. Io preparare una DLL in nativo (C ++), e voglio quando un evento occure, quindi a conoscenza il mio codice gestito; Come posso fare?

È stato utile?

Soluzione

Se API del DLL nativa consente di registrare un puntatore a funzione come un call-back da richiamare quando l'evento viene generato, è possibile maresciallo un normale C # delegato come un puntatore a funzione (Marshal.GetFunctionPointerForDelegate) e appena registrare il delegato gestito tramite P / Invoke.

Altri suggerimenti

Se si desidera gestire gli eventi nativi nel codice C #, quindi penso che la cosa migliore è di scrivere un C ++ / CLI DLL che avrebbe funzionato come strato intermedio tra C ++ nativo DLL e C # DLL. In questo modo è possibile gestire gli eventi nella libreria intermedio e trasmetterli di essere catturato di nuovo dalla DLL gestita.

Un'altra opzione è quella di scrivere il Native DLL come una DLL COM e sollevare COM inviano eventi da lì. Con la creazione di un'interoperabilità di questa DLL COM, è possibile acquisire gli eventi direttamente nella tua C # DLL. Ma questo percorso ha una curva di apprendimento molto ripida se siete nuovi a COM di programmazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top