我对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;
}
我正在使用监视窗口监视以下位置的值:
我是否正确使用了Marshal.copy或将数据从C ++传递到C#是否有问题
答案 0 :(得分:1)
您的代码很好。 IntPtr
值不会更改,但是它是非托管内存的地址,因此预计不会更改。