lwrite, ошибка 122

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ProgEXEr
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 7
Зарегистрирован: 26.01.2011 (Ср) 14:14
Откуда: Земной шар, Россия, Камчатский край, г. Петропавловск-Камчатский

lwrite, ошибка 122

Сообщение ProgEXEr » 29.03.2011 (Вт) 14:59

Здравствуйте!

На форуме я не нашёл раздела об API, но подумал, что можно и сюда задать вопрос, не судите, пожалуйста, строго.

Проблема такая:
Я открываю файл WinAPI-функцией lopen, записываю данные (lwrite, длина данных - 36 байт) и закрываю файл (lclose), но вызов lwrite возвращает "-1", Err.LastDLLError выдаёт 122 (Область данных переданная по системному вызову слишком мала).
Файл нормально открывает, в Unlocker'е видно, что файл открыт, дескриптор тот же, закрывает тоже без всяких ошибок.

Не надо мне предлагать использовать встроенные в VB функции открытия/записи в файл.

Заранее спасибо за ответы!
Тяжела и неказиста жизнь простого программиста...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: lwrite, ошибка 122

Сообщение Antonariy » 29.03.2011 (Вт) 16:53

А предложить выложить пример можно? Или можно только гадать на кофейной гуще?
Лучший способ понять что-то самому — объяснить это другому.

ProgEXEr
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 7
Зарегистрирован: 26.01.2011 (Ср) 14:14
Откуда: Земной шар, Россия, Камчатский край, г. Петропавловск-Камчатский

Re: lwrite, ошибка 122

Сообщение ProgEXEr » 30.03.2011 (Ср) 2:31

Код: Выделить всё
Dim map As String
f = lopen("файл", GENERIC_WRITE)
MsgBox Err.LastDllError
map = "EQM" & Chr(0) & a1 & a2 & Chr(0) & a3 & a4
MsgBox lwrite(f, map, Len(map))
MsgBox Err.LastDllError
lclose f
Тяжела и неказиста жизнь простого программиста...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: lwrite, ошибка 122

Сообщение Хакер » 30.03.2011 (Ср) 3:00

Код ужасен. Ладно.

Какое отношение имеет GENERIC_WRITE к lopen? GENERIC_WRITE — это для CreateFile. Для lopen надо использовать OF_WRITE.
А вообще эти функции устерали, могут быть упразднены, представлены для обратной совместимости и являются обёртками над CreateFile. Так что нужно использовать CreateFile.
А вообще нужно исползовать что-то вроде Debug.Assert/Debug.Print вместо MsgBox для отладки.
А вообще не нужно использовать в качестве буфера строку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ProgEXEr
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 7
Зарегистрирован: 26.01.2011 (Ср) 14:14
Откуда: Земной шар, Россия, Камчатский край, г. Петропавловск-Камчатский

Re: lwrite, ошибка 122

Сообщение ProgEXEr » 30.03.2011 (Ср) 3:06

Большое спасибо за ответ! Просто в последнем проекте я использовал CreateFile, видимо просто в памяти осталась именно эта константа.
Тяжела и неказиста жизнь простого программиста...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: lwrite, ошибка 122

Сообщение Хакер » 30.03.2011 (Ср) 3:07

Вот и сейчас её используй.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 94

    TopList