Ошибка с неуправляемой памятью

322
17 августа 2017, 19:49

Есть библиотека на c++ и документация к ней. В целом с ней могу работать, но с некоторыми функциями проблема.

В документации:

    LONG CLSCRF_MifareStandard_AuthKey( IN LPVOID pReader,
IN BYTE bKeyType, 
IN LPBYTE pbUID, 
IN DWORD dwSector, 
IN LPBYTE pbCodedKey );

Подключаю библиотеку:

[DllImport(ClscrflDll)]
        public static extern uint CLSCRF_MifareStandard_AuthKey(IntPtr pReader, byte bKeyType, IntPtr pbUID, uint dwSector, IntPtr pbCodedKey);

К примеру, UID - это массив байт, в IntPrt перевожу его так:

var pbUID = Marshal.AllocHGlobal(UID.Length);
        Marshal.Copy(UID, 0, pbUID, UID.Length);

С остальными типами, вроде всё понятно. В итоге при вызове функции получаю ошибку: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

Есть подозрения что это что-то с pbCodedKey. Это ключ авторизации. Его получаю я другой функцией:

    [DllImport(ClscrflDll)]
        public static extern uint CLSCRF_MifareStandard_HostCodeKey(IntPtr pReader, IntPtr pbUncoded, ref IntPtr pbCoded);
///----------
    byte[] key = new byte[6] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
    var pbKey = Marshal.AllocHGlobal(key.Length);
                Marshal.Copy(key, 0, pbKey, key.Length);
                var _key = Marshal.AllocHGlobal(12);
                var err = Clscrfl.CLSCRF_MifareStandard_HostCodeKey(pReader, pbKey, ref _key);

Её описание:

LONG CLSCRF_MifareStandard_HostCodeKey( IN LPVOID pReader,
IN LPBYTE pbUncoded,
OUT LPBYTE pbCoded );

В чём может быть проблема, хотя бы примерно?

READ ALSO
Преобразовать JSON строку в объект c# [дубликат]

Преобразовать JSON строку в объект c# [дубликат]

На данный вопрос уже ответили:

278
Как проверить e-mail c#?

Как проверить e-mail c#?

Можно ли отправить e-mail серверу проверочный запрос, что б подтвердить существование ящика? (Без авторизации)Поддерживают ли mail-сервера такую...

393
ORA-00936: missing expression

ORA-00936: missing expression

Когда я select делаю в Server я ловлю ошибку в catch ORA-00936: missing expression:

240
Нужно достать из HTML кода текст [дубликат]

Нужно достать из HTML кода текст [дубликат]

На данный вопрос уже ответили:

206