Domanda

Sto cercando di importare una funzione da un codice C ++ non gestito dll nella mia applicazione c #. Il C ++ prototipo è

int somefunction (int param1, int *param2 = NULL);

Come dichiaro questo in C # per sfruttare la natura di default di param2? Il seguente codice non funziona. param2 viene inizializzato con spazzatura.

DllImportAttribute("mydll.dll", EntryPoint = "somefunction")]
public static extern int somefunction(int param1);
È stato utile?

Soluzione

Se si sta utilizzando C # 4.0, allora la risposta dtb`s è l'approccio giusto. C # 4.0 ha aggiunto il supporto parametro opzionale e funzionano altrettanto bene con le funzioni PInvoke.

Prima di C # 4.0 non c'è modo di sfruttare il parametro opzionale. L'equivalente più è quello di definire una funzione che inoltra nell'altro.

[DllImport("mydll.dll", EntryPoint = "somefunction")] 
static extern int somefunction(int param1, IntPtr param2);

static int somefunction(int param1) {
  someFunction(param1, IntPtr.Zero);
}

Altri suggerimenti

Prova

[DllImport("mydll.dll", EntryPoint = "somefunction")]
static unsafe extern int somefunction(int param1, int* param2 = null);

o

[DllImport("mydll.dll", EntryPoint = "somefunction")]
static extern int somefunction(int param1, IntPtr param2 = default(IntPtr));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top