Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.027 c
14-1095841078
Unknown_User
2004-09-22 12:17
2004.10.17
Поймали, что делать??


1-1096362766
Drobu
2004-09-28 13:12
2004.10.17
Как отключить Debugger?


3-1095821078
ProgC
2004-09-22 06:44
2004.10.17
При закрытии приложения появляется двойная запись в БД


1-1096550211
cds
2004-09-30 17:16
2004.10.17
Отрисовка


1-1096661203
SMART_n
2004-10-02 00:06
2004.10.17
Delphi 8 и FillChar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский