Я не очень знаком с 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 #