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);
Foi útil?

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
scroll top