Marshal.Copy 没有复制价值
Marshal.Copy not copying over value
我对 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;
}
我正在使用我的手表 window 来监控以下值:
- ptr.m_value = 0x0641c040
- inputIntArray[0] = 152
- 0x0641c040 = 104972352 //这个在Marshal.Copy
之后不变
我是否使用了 Marshal.copy 不正确,或者将数据从 C++ 传递到 C# 时出现问题
你的代码没问题。 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;
}
我正在使用我的手表 window 来监控以下值:
- ptr.m_value = 0x0641c040
- inputIntArray[0] = 152
- 0x0641c040 = 104972352 //这个在Marshal.Copy 之后不变
我是否使用了 Marshal.copy 不正确,或者将数据从 C++ 传递到 C# 时出现问题
你的代码没问题。 IntPtr
值不会改变,但它是非托管内存的地址,因此预计不会改变。