powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Lpvoid
14 сообщений из 14, страница 1 из 1
Lpvoid
    #32692944
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро!
Подскажите, пожалуйста, какому типу в PB соответствует тип Lpvoid из WinAPI?

Заранее благодарен. Юмалов Алексей.
...
Рейтинг: 0 / 0
Lpvoid
    #32692976
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для какого WinAPI?
Что с Lpvoidом делать будут?
...
Рейтинг: 0 / 0
Lpvoid
    #32693156
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Испробуйте тип String или Char
...
Рейтинг: 0 / 0
Lpvoid
    #32693181
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LPVOID GlobalLock(

HGLOBAL hMem // address of the global memory object
);
...
Рейтинг: 0 / 0
Lpvoid
    #32693220
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SUBROUTINE GlobalLock ( ulong hMem ) LIBRARY "kernel32.dll"
...
Рейтинг: 0 / 0
Lpvoid
    #32693225
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, был неправ.
FUNCTION ulong GlobalLock ( ulong hMem ) LIBRARY "kernel32.dll"
...
Рейтинг: 0 / 0
Lpvoid
    #32693226
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
Lpvoid
    #32693246
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем GlobalLock ?
может можно CopyMemory обойтись?
...
Рейтинг: 0 / 0
Lpvoid
    #32693292
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всё пытаюсь сохранить экран в файл.

ll_DC = GetDC(0)
SetNull(l1)
ll_DestDC = CreateCompatibleDC(ll_DC)
ll_BMP = CreateCompatibleBitmap(ll_DC, li_W, li_H )
SetNull(l1)
// Получаю информацию о картинке
pbinf.bmiheader.bisize = 40
ii1 = GetDIBits(ll_DC, ll_BMP,0,0, l1, pbinf, 0)
l1 = GetLastError()
// Копирую
l2 = SelectObject( ll_DestDC, ll_BMP )
l1 = GetLastError()
b1 = BitBlt( ll_DestDC, 0, 0, li_W, li_H, ll_DC, 0, 0, 13369376 )
l1 = GetLastError()
// Выделяю память
lpBits = GlobalAlloc(0,pbinf.bmiheader.biSizeImage)
// Записываю картинку в помять
l1 = GetDIBits(ll_DestDC, ll_BMP,0,li_H,lpBits, pbinf, 0)
// Записываю файл
// Заголовок файла st_BITMAPFILEHEADER
hdr.bfType = 19778
hdr.bfSize = 14 + pbinf.bmiheader.biSize + &
pbinf.bmiheader.biClrUsed * 4 + pbinf.bmiheader.biSizeImage
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = 14 + pbinf.bmiheader.biSize + pbinf.bmiheader.biClrUsed * 4
//
SetNull(s33)
b2 = WriteFile(hf, hdr,14, l32,s33)
// Заголовок файла st_BITMAPINFOHEADER
pbih = pbinf.bmiheader
b2 = WriteFile(hf, pbih,40, l32,s33)
//
dwTotal = pbih.biSizeImage
cb = pbih.biSizeImage;
hp = lpBits;
do while (cb > 32765) //32765
b2 = WriteFile(hf,hp, 32765,l32,s33)
cb = cb - 32765;
hp = hp + 32765;
loop
b2 = WriteFile(hf, hp, cb,l32,s33)
//Закроем файл и освободим память
CloseHandle(hf)
GlobalFree(lpBits)

Но в файле только шум.
...
Рейтинг: 0 / 0
Lpvoid
    #32693486
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкинуть последние пару десятков строк ибо бред.
По крайней мере hp = hp + 32765; выглядит более чем странно.
Можно все собрать в один блоб с помощью RtlMoveMemory
И записать одним вызовом WriteFile.
Не вижу никакого смысла писать кусами по 32k,
если Вы решили не пользоваться встроенной FileWrite.
Ну или через FileWrite но тогда уж как обычно - выкусывая из блоба куски по 32k с помощью тормозной blobmid.
...
Рейтинг: 0 / 0
Lpvoid
    #32693675
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу найти описание RtlMoveMemory.
...
Рейтинг: 0 / 0
Lpvoid
    #32693778
Q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q
Гость
MSDNRtlMoveMemory
The RtlMoveMemory routine moves memory either forward or backward, aligned or unaligned, in 4-byte blocks, followed by any remaining bytes.

VOID
RtlMoveMemory(
IN VOID UNALIGNED *Destination,
IN CONST VOID UNALIGNED *Source,
IN SIZE_T Length
);
Parameters
Destination
Pointer to the destination of the move.
Source
Pointer to the memory to be copied.
Length
Specifies the number of bytes to be copied.
Return Value
None

Headers
Declared in wdm.h and ntddk.h. Include wdm.h or ntddk.h.

Comments
The (Source + Length) can overlap the Destination range passed in to RtlMoveMemory.

Callers of RtlMoveMemory can be running at any IRQL if both memory blocks are resident. Otherwise, the caller must be running at IRQL < DISPATCH_LEVEL.

See Also
RtlCopyMemory
...
Рейтинг: 0 / 0
Lpvoid
    #32694568
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) У Эрика Эйлинга есть готовый пример - Storing a window into clipboard and save as bitmap
http://eric.aling.tripod.com/PB/tips/pbtip35.htm
Он старый поэтому некоторые external declarations править надо.

Прилагаю мой (правленный) вариант
...
Рейтинг: 0 / 0
Lpvoid
    #32694861
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем огромное спасибо, особенно Зорину Андрею и Филиппу!
Всё получилось.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Lpvoid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]