Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
6-1092303906
digger
2004-08-12 13:45
2004.10.17
idHTTP через прокси


3-1095676473
Denniro
2004-09-20 14:34
2004.10.17
как правельно подключиться к базе с помощью ADO


14-1096360517
YurikGL
2004-09-28 12:35
2004.10.17
Штраф через мирового судью...


1-1096645797
Homa_Programer
2004-10-01 19:49
2004.10.17
Memo vs RichEdit


1-1096512067
Kost
2004-09-30 06:41
2004.10.17
Как изменить приоритет основного потока




   Наверх