DllImport c ++ funzione con parametri predefiniti
-
26-09-2019 - |
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);
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