gpt4 book ai didi

c# - 使用固定大小的缓冲区将结构数组从 C# 编码到 C++

转载 作者:行者123 更新时间:2023-11-30 03:54:21 30 4
gpt4 key购买 nike

我正在使用以下代码将结构数组编码到 C++:

[DllImport("IPD.dll", EntryPoint = "process", CallingConvention = CallingConvention.Cdecl)]
public static extern Pixel* process(Pixel* pixels, int numPoints, uint processingFactor);
[StructLayout(LayoutKind.Sequential)]
public unsafe struct Pixel
{
public fixed byte x[3];
public uint numebrOfPixels;
}
...
Pixel[] pixels = extractPixels(image);
fixed (Pixel* ptr = pixels)
{
Pixel* result = process(ptr, pixels.Length,processingFactor);
}

为了填充我的结构,我使用以下代码:

//Looping and populating the pixels    
for(i=0;i<numOfPixels;i++)
{
fixed (byte* p = pixels[i].x)
{
p[0] = r;
p[1] = g;
p[2] = b;
}
}

代码工作正常,没有内存泄漏。
我如何确定在将像素编码(marshal)到 native 代码期间 CLR 不会来回复制像素数组?

干杯,
多伦

最佳答案

可以确定编码器不会复制数组成员的方法是编码器不知道数组的大小。它根本无法编码数组内容。您只是传递固定数组的地址。不执行该数组内容的复制。

关于c# - 使用固定大小的缓冲区将结构数组从 C# 编码到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29599168/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com