Marshal.Copy не копирует значение - PullRequest
0 голосов
/ 30 октября 2018

Я не очень знаком с 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 голосов
/ 30 октября 2018

Ваш код в порядке. Значение IntPtr не изменяется, но это адрес неуправляемой памяти, поэтому не ожидается его изменения.

...