将指向结构的指针作为C#中的函数参数传递

时间:2010-11-23 11:05:44

标签: c# pointers struct parameter-passing

如何在C#中将指向结构的指针作为函数参数传递?

我正在尝试使用DLL中的一个函数,该函数的一个参数是双指针。例如,

struct mystruct
{
   int a;
   char b;
};

[DllImport("mydll.dll")]
private static extern int func_name(int a, char b, mystruct** c);

我想使用像int *a这样的指针的正确方法是ref int aint **a是否有类似内容?

2 个答案:

答案 0 :(得分:2)

指向指针的CLR等效项为ref IntPtr

IntPtr是指向整数的指针,当你通过ref传递它时,它通过引用传递,使其成为指针的指针。

您可能还需要使用Marshal.PtrToStructure method将指针转换为结构对象。

有关详细信息,请参阅this article底部附近标题为“手动编组”的部分。

答案 1 :(得分:0)

我会以不同的方式工作 任何指针都应该用作

  

System.IntPtr

然后我会用

  

Marshal.PtrToStructure

用于将指针实际转换为实际结构。否则我也会考虑使用偏移量逐字段复制,这有时更容易调试。