Frage

Ich versuche, eine Funktion aus einem nicht verwalteten Code c ++ dll in meine c # Anwendung zu importieren. Die C ++ Prototyp ist

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

Wie erkläre ich dies in c # Vorteil der Standard Art von param2 zu nehmen? Der folgende Code funktioniert nicht. param2 wird mit Müll initialisiert.

DllImportAttribute("mydll.dll", EntryPoint = "somefunction")]
public static extern int somefunction(int param1);
War es hilfreich?

Lösung

Wenn Sie mit C # 4.0 dann dtb`s Antwort ist der richtige Ansatz. C # 4.0 optionale Parameter-Unterstützung hinzugefügt und sie funktionieren genauso gut mit PInvoke Funktionen.

Vor der C # 4.0 gibt es keine Möglichkeit, die Vorteile des optionalen Parameter zu übernehmen. Die nächste ist eine äquivalente Funktion zu definieren, die nach vorn in die andere.

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

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

Andere Tipps

Versuchen

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

oder

[DllImport("mydll.dll", EntryPoint = "somefunction")]
static extern int somefunction(int param1, IntPtr param2 = default(IntPtr));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top