Как принять char[50] из неуправляемого кода?
От: dims12 http://www.relativity.ru
Дата: 16.09.10 16:45
Оценка:
Есть неуправляемая функция:

long EnumObjects(unsigned long dwIndex, char szName[50]);


Я пытаюсь её описать так

[DllImports...]
unsafe internal static extern long EnumObjects(ulong Index, StringBuilder Name);


Но при вызове, почему-то, возникает ошибка доступа к недопустимой памяти.

Стало быть, я что-то делаю не так. Но что?
Re: Как принять char[50] из неуправляемого кода?
От: _Eter_ http://mnazarov.ru
Дата: 17.09.10 07:14
Оценка:
Здравствуйте, dims12, Вы писали:


D>[DllImports...]
D>unsafe internal static extern long EnumObjects(ulong Index, StringBuilder Name);


D>Но при вызове, почему-то, возникает ошибка доступа к недопустимой памяти.


Вызывать нужно как-то так:


var index = ...;
var name = new StringBuilder(50);
EnumObjects(index, name);
Re: Как принять char[50] из неуправляемого кода?
От: _FRED_ Черногория
Дата: 17.09.10 07:27
Оценка:
Здравствуйте, dims12, Вы писали:

D>Есть неуправляемая функция:

D>long EnumObjects(unsigned long dwIndex, char szName[50]);

D>Я пытаюсь её описать так
D>[DllImports...]
D>unsafe internal static extern long EnumObjects(ulong Index, StringBuilder Name);


Вы точно уверены, что "unsigned long" в описании метода означает 64 бита?

D>Но при вызове, почему-то, возникает ошибка доступа к недопустимой памяти.

D>Стало быть, я что-то делаю не так. Но что?

Отсюда не видно, как вызываете.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Как принять char[50] из неуправляемого кода?
От: dims12 http://www.relativity.ru
Дата: 17.09.10 07:58
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Вы точно уверены, что "unsigned long" в описании метода означает 64 бита?


Да, конечно, Вы правы, прочёл уже доку и увидел, что именно в этом была ошибка.
Re: Как принять char[50] из неуправляемого кода?
От: TK Лес кывт.рф
Дата: 17.09.10 08:53
Оценка:
Здравствуйте, dims12, Вы писали:

D>Но при вызове, почему-то, возникает ошибка доступа к недопустимой памяти.


Примите как массив байт.

D>Стало быть, я что-то делаю не так. Но что?


Как минимум стоит указать какие символы используются — Ansi или Unicode. Судя по сигнатуре метода — 50 байт надо выделить заранее, в managed коде.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.