Comunicazione tra un'applicazione C # e DLL C ++

3

Attualmente sto costruendo uno streamer audio e ho una .dll CPP che utilizzo le funzioni all'interno della GUI C # di WPF.

Il programma deve gestire un tipo di eventi come

  • Abbassa / Aumenta volume
  • Manipola le bande degli equalizzatori

A questo punto ho usato gli eventi con nome per affrontare questo problema. Quale sarebbe un modo migliore di gestire tutti quegli eventi dalla GUI al file .dll? Il sistema degli eventi che utilizzo (.dll genera un thread che while-s su WaitForMultipleObjects), o sarebbe meglio / più intelligente / più vantaggioso o semplicemente migliore-pratica usare invece una named pipe?

    
posta user66141 24.01.2013 - 23:00
fonte

1 risposta

6

Puoi chiamare da C # a C / C ++ direttamente usando una tecnologia nota come P / Invoke. Con P / Invoke, è possibile creare una funzione C ++ simile a una funzione C #.

Ecco un semplice esempio di questo articolo in MSDN Magazine :

Definizione metodo C

BOOL MessageBeep(
  UINT uType   // beep type
);

P / Invoke Definition in C # del metodo in C

[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);

Chiamare il metodo C da C #

MessageBeep(0);

Ora, non è così semplice & pulito? Gran parte della libreria di base .NET è implementata come codice C / C ++ con un wrapper P / Invoke e una facciata C #. Il team .NET stesso usa P / Invoke piuttosto che COM per questo tipo di interoperabilità, è più semplice e più efficiente.

Un'ottima risorsa per scoprire come scrivere le definizioni del metodo P / Invoke è pinvoke.net .

    
risposta data 03.03.2013 - 15:40
fonte

Leggi altre domande sui tag