Хелло, 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.
Посоветуйте, что делать.
вдогонку.
40 байт — это для примера. я имею ввиду, что GetMailslotInfo сообщает размер файла в слоте (сообщения), я создаю буфер, считываю через ReadFile, но буфер не изменяется.