Страница: 1 | 2 |
Вопрос: Именованные каналы и API
Добавлено: 09.06.06 15:44
Автор вопроса: Wamark | Web-сайт:
Ребята,подскажите ,чё за фигня!
Создал ехе-шник для работы с именованными
каналами (на API),а он в интерпретаторе работает,
в p-code работает,а если в машинных компилирую ,то при вызове последней
функции нафиг выходит сразу!
Может встречалась фигня такая у кого?
У меня второй раз такой случай.
'*************** (Чтение данных (клиентом)) *****************************
'проверка наличия данных
tmpResult = PeekNamedPipe(hPipe&, 0, 0, lpBytesRead&, lpTotalBytesAvail&, lpBytesLeftThisMessage)
'если нет данных ->0
If lpTotalBytesAvail = 0 Then Exit Sub
если есть - прочитать канал ( он уже открыт )
tmpResult = ReadFile(hPipe, TempStr, lpTotalBytesAvail, lpBytesRead, 0) 'Здесь-то и произошёл глюк !
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 09.06.06 16:14
И что, как объявлен второй параметр у ReadFile?
Номер ответа: 2
Автор ответа:
Wamark
Вопросов: 2
Ответов: 22
Web-сайт:
Профиль | | #2
Добавлено: 09.06.06 17:27
lpBuffer as Any
Я много чё пробовал,даже адреса памяти передавал,
пробовал по значению
Вот штука - в p-code компилируется нормально,
а в машинный не хочет
Номер ответа: 3
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #3
Добавлено: 09.06.06 17:30
Ну и что мы хотим, передавая в такой параметр сроку byref?
Номер ответа: 4
Автор ответа:
Wamark
Вопросов: 2
Ответов: 22
Web-сайт:
Профиль | | #4
Добавлено: 09.06.06 17:40
Функция записывает данные в строку lpBuffer из очереди канала.
Да это буфер. С функцией _lRead всегда работало для файлов.
Номер ответа: 5
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 09.06.06 21:47
А этот TempStr где-нибудь инициализируется? Или ты пихаешь здоровый кусок по ее адресу и думаешь, что он ничего не затрет?
Номер ответа: 6
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #6
Добавлено: 09.06.06 22:22
Может, по ходу ещё многопоточность юзаешь? У меня были такие глюки при программировании оной на vb6.
Номер ответа: 7
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #7
Добавлено: 10.06.06 04:51
Да это буфер. С функцией _lRead всегда работало для файлов.
Повторю вопрос.
Ты в курсе, что строки-буферы надо передавать byval, а ты передаёшь byref?
Номер ответа: 8
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #8
Добавлено: 10.06.06 08:47
Кроме того, что ByVal, надо ещё и буфер достаточного размера передавать
TempStr = String(lpTotalBytesAvail, vbNullChar)
tmpResult = ReadFile(hPipe, ByVal TempStr.....
Номер ответа: 9
Автор ответа:
Wamark
Вопросов: 2
Ответов: 22
Web-сайт:
Профиль | | #9
Добавлено: 12.06.06 17:48
Чуваки ,извините,я тут долго за компом не был.
Номер ответа: 10
Автор ответа:
Wamark
Вопросов: 2
Ответов: 22
Web-сайт:
Профиль | | #10
Добавлено: 12.06.06 17:52
Расскажу по порядку
TempStr Больше нигде не используется,инициализуруется в начале функции .
Буфер только если по значению пенредавать,его адрес же функция не узнает и не сможет записать туда строку?
А вот что касается функции String,сейчас попробую
Номер ответа: 11
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #11
Добавлено: 12.06.06 18:09
Учить матчасть.
Номер ответа: 12
Автор ответа:
Wamark
Вопросов: 2
Ответов: 22
Web-сайт:
Профиль | | #12
Добавлено: 12.06.06 18:18
Попробую. Я про API читал только книжку
Д.Эпплмана
Номер ответа: 13
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #13
Добавлено: 13.06.06 21:29
Это только придурочный паскаль, если ему не указать явно, что строка должна передаваться по ссылке, положит ее в стек. VB при передаче как ByVal конвертит свой BSTR (юникод, по оффсету -4 размер) в ANSI (символ - 1 байт, на конце \0) и кладет в стек ее адрес.
Номер ответа: 14
Автор ответа:
Wamark
Вопросов: 2
Ответов: 22
Web-сайт:
Профиль | | #14
Добавлено: 24.06.06 14:05
Да там вабще не Уникод,а уродство какое-то возвращается. Чё там за формат,как эту хрень в АНСИ конвертить?
Номер ответа: 15
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #15
Добавлено: 25.06.06 00:26
Как выглядит это уродство?