2010-09-29 8 views
2

J'essaye d'importer une fonction d'un code non managé C++ dll dans mon application C#. Le prototype C++ estFonction DLLImport C++ avec les paramètres par défaut

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 est initialisé avec des ordures.

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

Répondre

1

Si vous utilisez C# 4.0 puis dtb`s réponse est la bonne approche. C# 4.0 a ajouté un support de paramètre optionnel et fonctionne aussi bien avec les fonctions PInvoke.

Avant C# 4.0, il n'existe aucun moyen de tirer parti du paramètre optionnel. L'équivalent le plus proche est de définir une fonction qui avance dans l'autre.

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

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

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)); 
+0

Merci, mais aucune de ces options ne sera compilée. – user461900

+0

Ils compilent bien ici, mais je ne peux pas tester s'ils fonctionnent réellement, parce que je n'ai pas votre DLL non managé. – dtb

Questions connexes