【发布时间】:2013-09-03 12:17:44
【问题描述】:
我正在尝试使用 pinvoke 将 C 结构编组为 C#。虽然我能够编组一个 intptr,但我找不到编组双指针的语法。在 C 端使用 int 指针和 double 指针来分配整数或双精度数组。
这是 C 结构体:
struct xyz
{
int *np; // an int pointer works fine
double *foo;
};
这里是 c# 类:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class xyz
{
Intptr np; // works fine
// double *foo ??
}
我找不到任何关于如何标记的说明
【问题讨论】:
-
IntPtr 只是一个指针:直到 void*;所以你可以尝试将“double* foo”编组为“IntPtr foo”;
-
IntPtr 并不意味着“指向整数的指针”。 MSDN:IntPtr 类型被设计为一个整数,其大小是特定于平台的。它可以指向任何数据。
-
澄清:C 代码正在执行所有分配/释放内存的工作,因此 C# 端完全没有意识到这一切。
标签: c# c pointers pinvoke marshalling