Question

Je suis en train d'importer une fonction à partir d'un code non managé c ++ dll dans mon application c #. Le c ++ prototype est

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

Comment puis-je déclarer cela en c # pour profiter de la nature par défaut de param2? Le code suivant ne fonctionne pas. param2 s'initialisé avec les ordures.

DllImportAttribute("mydll.dll", EntryPoint = "somefunction")]
public static extern int somefunction(int param1);
Était-ce utile?

La solution

Si vous utilisez C # 4.0 puis réponse dtb`s est la bonne approche. C # 4.0 a ajouté le support des paramètres en option et ils fonctionnent aussi bien avec des fonctions PInvoke.

Avant C # 4.0, il n'y a aucun moyen de tirer profit du paramètre optionnel. Le plus proche équivalent est de définir une fonction qui transmet à l'autre.

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

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

Autres conseils

Essayez

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

ou

[DllImport("mydll.dll", EntryPoint = "somefunction")]
static extern int somefunction(int param1, IntPtr param2 = default(IntPtr));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top