DLLImport c ++函数,带有默认参数

时间:2010-09-29 15:22:24

标签: c# c++ pinvoke default-parameters

我正在尝试将一个非托管代码c ++ dll中的函数导入到我的c#应用程序中。 c ++原型是

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

如何在c#中声明这一点以利用param2的默认特性?以下代码不起作用。 param2用垃圾初始化。

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

2 个答案:

答案 0 :(得分:1)

如果您使用的是C#4.0,那么dtb的回答是正确的方法。 C#4.0添加了可选参数支持,它们与PInvoke函数一样工作。

在C#4.0之前,无法利用可选参数。最接近的等价物是定义一个转发到另一个的函数。

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

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

答案 1 :(得分:0)

尝试

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

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