Работа с CreateFileMapping.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Работа с CreateFileMapping.

Сообщение TEH3OP » 17.05.2004 (Пн) 15:38

Привет всем.

Что имеется:
объект StdPicture с растром в формате BMP.

Что нада:
Получить байтовый массив, являющий собой файл BMP. Т.е. файл, который бы получился если VB.SavePicture сделать.
При этом неззя пользоваться временным файлом!

Что я уже мозгом наскрипел:
Делаю CreateFileMapping так:
Код: Выделить всё
lngHFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, _
                                    udtSECURITY_ATTRIBUTES, _
                                    SEC_RESERVE Or PAGE_READWRITE, _
                                    0&, _
                                    10000&, _
                                    "ImageTempFile")

Теперь сохраняю картинку (clsPic это StdPicture) так:
Код: Выделить всё
VB.SavePicture clsPic, "ImageTempFile"

Потом делаю так:
Код: Выделить всё
Dim lngMapViewPtr As Long
VB.SavePicture clsPic, "ImageTempFile"
lngMapViewPtr = MapViewOfFile(lngHFileMapping, _
                              FILE_MAP_READ, _
                              0&, _
                              0&, _
                              10000&)
If lngMapViewPtr <> 0& Then
    ReDim oData(9999&) As Byte
    'Вот тут ВСЁ <censored> ВЫЛЕТАЕТ с Memory Exeption!!!
    CopyMemory oData(0), ByVal lngMapViewPtr, 2&
    UnmapViewOfFile ByVal lngMapViewPtr
End If

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.05.2004 (Вт) 10:10

Предлагается заценить проперть StdPicture.Handle и функцию GetDIBits... Не пробовал, но по идее должно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Сообщение TEH3OP » 18.05.2004 (Вт) 15:16

GSerg писал(а):Предлагается заценить проперть StdPicture.Handle и функцию GetDIBits... Не пробовал, но по идее должно...

И не пробуй!!! Не прёт!!! ;-)
Из-за разной архитектуры представления данных в файле и в памяти -- против little-endian не попрёшь!!!
Простой CopyMemory делать неззя!!!
В итоге получается реееедкосный гимор...

Вот если выйдет создать в памяти фавлик с именем -- всё буит в ажуре!


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList