![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GlobalLock [D7, WinXP]
P@vel © (2004-09-15 15:44:00)Дело такое. Надо получить начальный адрес блока памяти. Делал так
HWND:=GlobalAlloc(GMEM_MOVEABLE,2);
HWND:=GlobalReAlloc(HWND,FSize,GMEM_MOVEABLE);
Adress:= GlobalLock(HWND);
GlobalUnlock(HWND);
HWND:=GlobalAlloc(GMEM_MOVEABLE,1);
HWND:=GlobalReAlloc(HWND,FSize,GMEM_MOVEABLE);
Adress:= GlobalLock(HWND);
В последней строке Adress становится null. А LastError показывает ошибку N157
ERROR_DISCARDED
The segment is already discarded and cannot be locked.
Можно ли получить начальный адрес не используя GlobalLock ?
Cobalt (2004-09-15 22:00:00) [1]2 P@vel © (15.09.04 17:07) [10]
> No pri etom ja vseravno polu4'al. HWND ne ravnij nil.
Любите справку - источник знаний!
dwBytes
Specifies the new size, in bytes, of the memory block. If this parameter is zero and the uFlags parameter specifies the GMEM_MOVEABLE flag, the function returns the handle of a memory object that is marked as discarded.If uFlags specifies the GMEM_MODIFY flag, this parameter is ignored.
P@vel (2004-09-15 17:07:00) [2]Da dejstvitel'no. FSize ravnalsa nul'u. No pri etom ja vseravno polu4'al. HWND ne ravnij nil. Sha vse ispravil senx.
inic (2004-09-15 16:42:00) [3]Какое значение у FSize в этот момент ? Что говорит дебуг ?
И все-таки, ИМХО, не стоит пользоваться Address после GlobalUnlock(HWND), адрес может оказаться не актуальным .
P@vel (2004-09-15 16:34:00) [4]
> Суслик
Большое спасибо за ссылку. Книга на шару это очент приятно. :) Сейчас почитаем.
P@vel (2004-09-15 16:27:00) [5]
HWND:=GlobalAlloc(GMEM_MOVEABLE,2);
HWND:=GlobalReAlloc(HWND,FSize,GMEM_MOVEABLE);
Adress:= GlobalLock(HWND);
GlobalUnlock(HWND);
HWND:=GlobalAlloc(GMEM_MOVEABLE,1);
HWND:=GlobalReAlloc(HWND,FSize,GMEM_MOVEABLE);
NewAdress:= GlobalLock(HWND);
.....
{Copy Commands}
.....
Adress:=NewAdress;
Суслик (2004-09-15 16:14:00) [6]Т.к. ответа я на память не помню, то могу посоветовать сказать первую ссылку с http://irazin.ru/Some.htm(книга Рихтера) и прочесть 18 главу (там ровно 10 страниц).
Может поможет.
Успехов.
inic (2004-09-15 16:13:00) [7]И все таки, интересно, ты же значения переменных заменяешь, как тогда работать с 1ой памятью, ее даже не освободить.
P@vel (2004-09-15 16:10:00) [8]X3. Но сейчас всё переделывать нет желания.
Суслик (2004-09-15 16:05:00) [9]Зачем тебе вообще куча нужна?
Чем штатный менеджер памяти (getmem, freemem и пр) не угодил?
P@vel (2004-09-15 16:03:00) [10]Дело в том, что я пишу объект(типа stream). Только, что-бы при чтении, прочитанный кусок памяти удалялся. Ну так вот первые 4 строки выделяют память 10б. А в остальных выделяется память 8б. Ну и потом там соответственно всё копируется за исключением. прочитанного отрезка.
inic (2004-09-15 15:52:00) [11]Зачем тут первые 4 строки, от них смысла вроде никакого.
ИМХО, плохо работать с адресом анлоканной памяти.
Может FSize = 0 ?