元帅。复制不复制价值

时间:2018-10-30 18:47:16

标签: c# marshalling dllimport intptr

我对C#不太熟悉,我正在尝试使用'Marshal.Copy',但它没有更改我正在使用的IntPtr的值。

IntPtr ptr = InitPointer(width, height);

Marshal.Copy(inputIntArray, 0, ptr, width * height * 4);

其中InitPointer定义为:

[DllImport(@"../../../../Debug/KernelApplier.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr InitPointer(int x, int y);

在我的kerneApplier.dll中,函数写为:

int * inputBuffer;
int size;
int m_x, m_y;

extern "C" __declspec(dllexport) int* InitPointer(int x, int y) {
    size = x*y * sizeof(cl_int3);
    m_x = x;
    m_y = y;
    inputBuffer = (int*)malloc(size * sizeof(int));
    return inputBuffer;
}

我正在使用监视窗口监视以下位置的值:

  • ptr.m_value = 0x0641c040
  • inputIntArray [0] = 152
  • 0x0641c040 = 104972352 //这在元帅之后不会改变。复制

我是否正确使用了Marshal.copy或将数据从C ++传递到C#是否有问题

1 个答案:

答案 0 :(得分:1)

您的代码很好。 IntPtr值不会更改,但是它是非托管内存的地址,因此预计不会更改。