Função DLLIMPORT C ++ com parâmetros padrão
-
26-09-2019 - |
Pergunta
Estou tentando importar uma função de uma dll C ++ Code C ++ não gerenciada no meu aplicativo C#. O protótipo C ++ é
int somefunction (int param1, int *param2 = NULL);
Como faço para declarar isso em C# para aproveitar a natureza padrão do param2? O código a seguir não funciona. Param2 é inicializado com lixo.
DllImportAttribute("mydll.dll", EntryPoint = "somefunction")]
public static extern int somefunction(int param1);
Solução
Se você estiver usando o C# 4.0, a resposta do DTB é a abordagem correta. C# 4.0 Adicionado suporte de parâmetro opcional e eles também funcionam com as funções Pinvoke.
Antes do C# 4.0, não há como aproveitar o parâmetro opcional. O equivalente mais próximo é definir uma função que encaminha para a outra.
[DllImport("mydll.dll", EntryPoint = "somefunction")]
static extern int somefunction(int param1, IntPtr param2);
static int somefunction(int param1) {
someFunction(param1, IntPtr.Zero);
}
Outras dicas
Tentar
[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));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow