Повреждение памяти при работе с внешними методами C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Повреждение памяти при работе с внешними методами C#

Сообщение Anonymous »

Играя с библиотекой CH341, я обнаружил проблему в виде PVOID.
Когда я пытаюсь использовать метод с PVOID, он портит память.
Для Например, есть метод получения дескриптора. Я пробовал связать его с C# разными способами, но в лучшем случае он вообще не меняет буфер, а в худшем даже повреждает то, на что я не дал ссылку.
Из заголовочного файла:

Код: Выделить всё

BOOL    WINAPI  CH341GetDeviceDescr(  // Read device descriptor
ULONG           iIndex,  // Specify the serial number of the CH341 device
PVOID           oBuffer,  // Points to a buffer large enough to hold the descriptor
PULONG          ioLength );  // Points to the length unit, the length to be read when input is the length to be read, and the actual read length after return
Мой код:

Код: Выделить всё

[DllImport(dllName)]
private static unsafe extern bool CH341GetDeviceDescr(ulong index, void* buffer, ref ulong length);

public static unsafe string GetDeviceDescr(ulong index)
{
ulong length = 1024;
byte[] buffer = new byte[length];

if (!CH341GetDeviceDescr(index, &buffer, ref length))
throw new Exception("It is not possible to get the value.");

return Encoding.Unicode.GetString(buffer, 0, (int)length);
}
Произошла ошибка при попытке использовать буфер:
"Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена".
Так же портит длину, устанавливая ее значение 1427249798
Я тоже пробовал через Marshal и GCHandle, но буфер тоже не меняется

Подробнее здесь: https://stackoverflow.com/questions/779 ... rp-methods
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»