2

我正在尝试将非托管代码 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);
4

2 回答 2

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);
}
于 2010-09-29T15:47:11.553 回答
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));
于 2010-09-29T15:30:05.637 回答