У меня есть C++ DLL, которая имеет функции для отправки данных с устройства. Из моего управляемого кода на C# я вызываю функцию C++ functionCallback. Здесь обратите внимание на поз. pos по определению - это массив из трех указателей, указывающий на массивы позиций.IntPtr адрес increment (not value)
public void positionCallback(uint devNo,uint count,uint index,ref System.IntPtr pos,ref System.IntPtr mrk)
Теперь мой вопрос я хочу, чтобы извлечь данные каждого из этих 3-х массивов, но я могу только получить данные для массива 1 и для отдыха 2 я получаю значение мусора. Ниже приведен код, я пытаюсь
// Copy the unmanaged array to managed memory for Axis 2
IntPtr ptr2 = IntPtr.Add(pos,2*sizeof(Int64));
Marshal.Copy(pos,managedArrayAxis1,0,(int)count);
// Copy the unmanaged array to managed memory for Axis 2
Marshal.Copy(ptr2, managedArrayAxis2, 0, (int)count);
Приведенный выше код дает правильные данные только для managedArrayAxis1 но managedArrayAxis2, мусор данных сбора. Я ошибочно увеличиваю адрес IntPtr для pos?
Пожалуйста, помогите!
вы уверены, что Int64 правильно? Если он должен быть int, и вы используете Int64, это вызовет проблемы. – pquest
Int32 также дает значения мусора для managedArrayAxis2. Так что попробовали оба. Любое другое предложение поможет! – Maverick
Что касается того факта, что вы передаете эти указатели по ссылке. Я бы предположил, что это будет выглядеть как int ** в библиотеке C++. вы уверены, что это то, что ищет метод C++? – pquest