【发布时间】:2014-04-10 12:45:15
【问题描述】:
对于一些非托管代码,我确实在 C# 包装器中有以下结构。我尝试使用指针传递一些数据,这对于 ushort* 和 byte* 部分很好,但不适用于固定 int。
[StructLayout(LayoutKind.Sequential)]
unsafe public struct IMAGE
{
public fixed int nSize[2];
public ushort* pDepthIm;
public byte* pColorIm;
}
为了用一些信息填充这个结构,我使用:
unsafe public void LoadImage(ushort[] depthImage, byte[] rgbImage, int[] size)
{
unsafe
{
fixed (int* pSize = size)
fixed (ushort* pDepth = depthImage)
fixed (byte* pRGB = rgbImage)
{
_im.nSize = pSize;
_im.pColorIm = pRGB;
_im.pDepthIm = pDepth;
...
}
}
}
在_im.nSize = pSize;,编译器显示错误,声明:
您不能使用包含在不固定表达式中的固定大小的缓冲区。 尝试使用固定语句。
我已经注意到int 以不同的方式初始化(不是使用指针-*,而是使用fixed int),但我不知道如何传递值。将鼠标悬停在变量上时,显示为int*...
更新:我遇到了MSDN error reference 来获取上述消息。我现在确定它与 IMAGE 结构中的 fixed 语句有关,但我仍然不知道如何修复它。
【问题讨论】:
-
所有显示的代码都是 C#。我添加了 C++ 标记,因为我正在访问非托管 C++ 库。
标签: c# pointers unmanaged managed