Трабл с WinPopup
От: alibek  
Дата: 27.06.02 10:09
Оценка:
Хелло, All.

У меня такая проблема. Для начала — ОС Windows NT 4.0 + MS VB 6.0.

Пишу свой WinPopup, а для тестирования пишу не в слот messngr, а в слот msgtest.
Так вот, mailslot-сервер создается, сообщения в него пишутся (WriteFile возвращает 0). Регистрирется даже появление новых сообщений (по GetMailslotInfo). Но когда я их считываю, получается ерунда.
Примерно такой код:
...
If GetMailslotInfo(MailslotHandle, retMaxMsgSize, retNextMsgSize, retMsgCount, retMsgReadTimeout) = 0 Then Exit Sub
...
msg = String$(retNextMsgSize, "*")
If ReadFile(MailslotHandle, msg, retNextMsgSize, BytesRead, Null) = 0 Then Exit Sub
...

Так вот, если retNextMsgSize=40 байт, то после считывания файла переменная msg не изменяет своего содержимого, но файл в слоте считается прочитанным (retMsgCount=0 и retNextMsgSize=-1).
Если прогу откомпилировать и запустить, то сообщения вообще не отправляются (ошибка возникает либо в CreateFile либо в WriteFile).
Мысль была что VB хранит строки в Unicode, а в ReadFile/WriteFile указывается размер в байтах, так что я указывал размер буфера вдвое больше (ReadFile(MailslotHandle, msg, 2*retNextMsgSize, BytesRead, Null)), но тогда получалась вообще ерунда — в переменную попадали значения каких-то левых строк (например, если где-то в коде до этого было Print "Message sent", то эта строка и оказывалась в буфере).
И кроме того, раз уж у меня WinNT, то API'шные функции также работают в Unicode.

Посоветуйте, что делать.
Re: Трабл с WinPopup
От: alibek  
Дата: 27.06.02 10:15
Оценка:
вдогонку.

40 байт — это для примера. я имею ввиду, что GetMailslotInfo сообщает размер файла в слоте (сообщения), я создаю буфер, считываю через ReadFile, но буфер не изменяется.
Re[2]: Трабл с WinPopup
От: clod  
Дата: 27.06.02 12:03
Оценка:
Здравствуйте alibek, Вы писали:

A>вдогонку.


A>40 байт — это для примера. я имею ввиду, что GetMailslotInfo сообщает размер файла в слоте (сообщения), я создаю буфер, считываю через ReadFile, но буфер не изменяется.

я тебе бросил на мыло класс который работает со слотами в стиле winpopup`а, но только под NT это работать не будет, так как в ней (в NT) за это отвечает сервис сообщений. и он тебе не даст так просто прочитать слот. а под win9x все ок.
Re[3]: Трабл с WinPopup
От: Аноним  
Дата: 27.06.02 12:29
Оценка:
Здравствуйте clod, Вы писали:

C> только под NT это работать не будет, так как


так это не проблема. при запуске прога будет останавливать сервис (если система NT и сервис запущен), а при выгрузке — запускать.
Re[3]: Трабл с WinPopup
От: Аноним  
Дата: 27.06.02 12:32
Оценка:
кстати, письмо получил, спасибо огромное
теперь буду разбираться :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.