Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

GlobalLock   Найти похожие ветки 

 
P@vel ©   (2004-09-15 15:44) [0]

Дело такое. Надо получить начальный адрес блока памяти. Делал так


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 ?


 
inic ©   (2004-09-15 15:52) [1]

Зачем тут первые 4 строки, от них смысла вроде никакого.

ИМХО, плохо работать с адресом анлоканной памяти.

Может FSize = 0 ?


 
P@vel ©   (2004-09-15 16:03) [2]

Дело в том, что я пишу объект(типа stream). Только, что-бы при чтении, прочитанный кусок памяти удалялся. Ну так вот первые 4 строки выделяют память 10б. А в остальных выделяется память 8б. Ну и потом там соответственно всё копируется за исключением. прочитанного отрезка.


 
Суслик ©   (2004-09-15 16:05) [3]

Зачем тебе вообще куча нужна?

Чем штатный менеджер памяти (getmem, freemem и пр) не угодил?


 
P@vel ©   (2004-09-15 16:10) [4]

X3. Но сейчас всё переделывать нет желания.


 
inic ©   (2004-09-15 16:13) [5]

И все таки, интересно, ты же значения переменных заменяешь, как тогда работать с 1ой памятью, ее даже не освободить.


 
Суслик ©   (2004-09-15 16:14) [6]

Т.к. ответа я на память не помню, то могу посоветовать сказать первую ссылку с http://irazin.ru/Some.htm (книга Рихтера) и прочесть 18 главу (там ровно 10 страниц).

Может поможет.
Успехов.


 
P@vel ©   (2004-09-15 16:27) [7]


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;



 
P@vel ©   (2004-09-15 16:34) [8]


> Суслик

Большое спасибо за ссылку. Книга на шару это очент приятно. :) Сейчас почитаем.


 
inic ©   (2004-09-15 16:42) [9]

Какое значение у FSize в этот момент ? Что говорит дебуг ?

И все-таки, ИМХО, не стоит пользоваться Address после GlobalUnlock(HWND), адрес может оказаться не актуальным .


 
P@vel ©   (2004-09-15 17:07) [10]

Da dejstvitel"no. FSize ravnalsa nul"u. No pri etom ja vseravno polu4"al. HWND ne ravnij nil.  Sha vse ispravil senx.


 
Cobalt ©   (2004-09-15 22:00) [11]

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.



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-1096549347
roma
2004-09-30 17:02
2004.10.17
Button1 i Button2


1-1096383230
SMT
2004-09-28 18:53
2004.10.17
Литература по работе с Excel из Delphi


1-1096479986
xman
2004-09-29 21:46
2004.10.17
TreeView


14-1096344369
КаПиБаРа
2004-09-28 08:06
2004.10.17
Настройка оперы


14-1096297672
Копир
2004-09-27 19:07
2004.10.17
- Да чего тебя жалеть-то? - крикнул хозяин, очутившийся опять