Мы создаем приложение на c #, .net 4.0, на Win7 x64 с таргетингом на x32.
Мы используем стороннюю библиотеку в нашем приложении. Мы понимаем, что эта библиотека написана с использованием C ++. Однако, чтобы позволить разработчикам на c # использовать эту библиотеку, они обернули ее с помощью P / Invoke, поэтому мы так называем функции API.
Один из вызовов API выглядит следующим образом:
ReadFromDevice(int deviceAddress, int numBytes, Byte[] data);
Эта функция считывает numBytes данных с внешнего устройства и помещает их в data []. Как вы можете видеть, он ожидает увидеть байтовый массив C # в качестве третьего аргумента. Теперь наша проблема в том, что мы хотим прочитать данные в произвольном месте в предварительно объявленном массиве. Например:
Byte[] myData = new Byte[1024*1024*16];
ReadFromDevice(0x100, 20000, &myData[350]) // Obviously not possible in C#
Если бы мы использовали C / C ++, это было бы тривиально. Учитывая, что базовый API написан на C ++, я чувствую, что мы должны быть в состоянии сделать это и в C #, однако я не могу понять, как это сделать в C #. Может быть, мы можем как-то вызвать базовую библиотеку не через предоставленный интерфейс P / Invoke и написать собственный интерфейс?
Любые идеи будут оценены.
С уважением,