我有一个带有非托管代码和 C# UI 的 C++ DLL。有一个从 C++ DLL 导入的函数,它以我编写的结构作为参数。
在将由我编写的结构 (MyImage) 从 C# 编组到 C++ 之后,我可以访问其中的 int[] 数组的内容,但内容不同。我不知道我在这里缺少什么,因为我花了很多时间并尝试了一些技巧来解决这个问题(显然还不够)。
C# 中的 MyImage 结构:
[StructLayout(LayoutKind.Sequential)]
struct MyImage
{
public int width;
public int height;
public int[] bits; //these represent colors of image - 4 bytes for each pixel
}
C++ 中的 MyImage 结构:
struct MyImage
{
int width;
int height;
Color* bits; //typedef unsigned int Color;
MyImage(int w, int h)
{
bits = new Color[w*h];
}
Color GetPixel(int x, int y)
{
if (x or y out of image bounds) return UNDEFINED_COLOR;
return bits[y*width+x];
}
}
以 MyImage 作为参数的 C# 函数声明:
[DLLImport("G_DLL.dll")]
public static extern void DisplayImageInPolygon(Point[] p, int n, MyImage texture,
int tex_x0, int tex_y0);
C++ 实现
DLLEXPORT void __stdcall DisplayImageInPolygon(Point *p, int n, MyImage img,
int imgx0, int imgy0)
{
//And below they have improper values (i don't know where they come from)
Color test1 = img.GetPixel(0,0);
Color test2 = img.GetPixel(1,0);
}
因此,在调试问题时,我注意到 c++ 结构中的 MyImage.bits 数组包含不同的数据。
我该如何解决?