![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
Всем привет!
В программе использую функцию DeviceIOControl. Её подключение: [DllImport("kernel32.dll", SetLastError = true)] private static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode, byte[] lpInBuffer, uint nInBufferSize, byte[] lpOutBuffer, uint nOutBufferSize, out uint lpBytesReturned, IntPtr lpOverlapped); Надо её использовать в функции:
Проблема в том, что в SetTimeOutCom передается параметр типа UInt16, а в DeviceIoControl входной буфер типа byte[]. Как это решить? Т.е. мне в test надо засунуть значение, находящееся в параметре b |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
stab, спасибо, попробую
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
Оказывается, в функции
DeviceIoControl(hdrv, IOCTL_SET_OUTCOM, in_buf, 2, out_buf, 4, out txdBytes, IntPtr.Zero); in_buf и out_buf могут быть как типа byte, так и типа ushort и ulong, а как же мне это сделать, если в описании DeviceIoControl входной и выходной буферы типа byte[] Помогите пожайлуста, никак с этим разобраться не могу... Добавлено через 2 минуты и 15 секунд Есть ещё такое описание: public static extern bool DeviceIoControl( int hDevice, uint dwIoControlCode, ref long InBuffer, int nInBufferSize, ref long OutBuffer, int nOutBufferSize, ref int pBytesReturned, IntPtr lpOverlapped); но я опять же не могу понять как работать ref long InBuffer ? А если InBuffer не нужен? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вариант - передавать IntPtr, потом превращать в указатель на нужный тип. -------------------- ![]() |
|||
|
||||
| 1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 8 Всего: 40 |
насколько я понимаю, в описании DeviceIoControl входной и выходной буферы типа void, т.е. любого типа
по-моему вам поможет метод System.Runtime.InteropServices.Marshal.Copy() -------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
mr.DUDA, а каким образом превращать в указатель на нужный тип?
Можно пример? Добавлено через 1 минуту и 7 секунд 1stain, можно подробнее, для меня это темный лес... |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
на www.pinvoke.net есть сигнатура перегрузки для C# и пример работы.
Aline, ты его не пробовала использовать? -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
А про какой пример ты говоришь? Я толковых примеров там не нашла.
Что касается перегрузки, то я оттуда взяла по совету:
но только я понять не могу, если lpOutBuffer типа byte[] то как я могу получиьт данные в виде массива ulong ? У меня это в голове не укладывается А также и lpOutBuffer нужен будет типа ushort, а описан как byte .... |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
как не нашла? Я же линк кинул.
ни в одной сигнатуре нет массивов байт. Примеры там же, ниже. (http://www.pinvoke.net/default.aspx/kernel32/DeviceIoControl.html) -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
скорее всего тогда сигнатура была для coredll:
мне значит неправильно подсказали. Тем не менее я всё равно не понимаю как с этим работать и с вышеприведенными для kernel32 Примеры для меня не совсем понятные |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
почитай это, подставь нужные значения как параметры (но только с типами и значениями, которые указаны в перегрузке с Pinvoke) и работай.
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |