0

我在 C DLL 中有以下结构:

struct foo
{
      double *x;
      short  *y;
}

调用 DLL 的 c# 应用程序:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class foo
{
        public ? x;
        public ? y;
}

我知道如果我有一个 int*,我应该使用 IntPtr,但找不到 short* 和 double * 的等价物。

在 C 端,我使用 short * 来分配 short 数组,double * 用于双精度数组。

4

1 回答 1

1

实际上,C# 中的所有非托管指针都使用IntPtr. 之所以这样称呼它,IntPtr不是因为它类似于int *,而是因为它是一个“指针”大小的整数(与Int32和不同Int64,它们分别是 32 位和 64 位的整数)。它的大小取决于平台。

x[0]例如,要获得 的值,您可以这样做

double[] arr = new double[1];
Marshal.Copy(f.x, arr, 0, 1);

要阅读*y,你会做

short val = Marshal.ReadInt16(f.y);
于 2012-09-18T01:36:05.590 回答