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

Вниз

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

 
alex134 ©   (2003-04-05 18:13) [0]

Помогите плз разобраться со вторым параметром этой функции ! Если можно, маленький примерчик )


 
MBo ©   (2003-04-05 18:33) [1]

выделяешь память под буфер, который будет содержать дескрипторы куч, вызываешь функцию с параметром-первым элементом массива. Он может быть динамическим, возвращаемое значение - истинное количество куч. Если оно больше, чем запросил в первом параметре, реаллоцируй память и заново вызови.
Простейший случай:

var HeapHandles:array[1..100] of THandle;
n:integer;
begin
n:=GetProcessHeaps(100,HeapHandles[1]);


 
alex134 ©   (2003-04-05 23:57) [2]

Спасибо, понял. Еще вопрос: Например у процесса 5 куч - я получил 5 хэндлов. А как теперь узнать фактическое расположение этих куч ? Т.е. по какому адресу находится каждая из них? Или хэндлы это и есть их адреса?


 
alex134 ©   (2003-04-06 00:27) [3]

И вот такая радость вдобавок:

procedure TForm1.Button1Click(Sender: TObject);
var
Buffer : array [1..100] of THandle;
i : integer;
number : DWORD;
begin
number:=GetProcessHeaps(100, Buffer[1]);
ShowMessage(IntToStr(number));
for i:=0 to (number-1) do
Memo1.Lines.Add(IntToStr(Buffer[i]));
end;

Выдает всегда 0. Это как понимать? Типа 0 куч? В хэлпе сказано, что если функция возвращает 0 значит полюбому ошибка, потому что у любого процесса как минимум 1 куча.


 
alex134 ©   (2003-04-06 00:29) [4]

P.S В коде счетчик цикла от 1 до number, хотя это на дело не влияет...


 
boozook   (2003-04-07 02:14) [5]

В Паскалях не шарю, но осмелюсь предположить, что это все не правельные записи.
Возможно будет правильно так:

var
Buffer : array [1..100] of Handle;
...
begin
number:=GetProcessHeaps(100, @Buffer);
...

???

THandle, Handle или DWORD - это все двойные слова, а второй параметр - указатель на массив из них.
На сколько я помню со школы Buffer[1] - это не указатель, а само значение.

P.S. и на Си и на Асме у меня выдается 4.


 
MBo ©   (2003-04-07 06:39) [6]

>array [ 1..100]
>for i:= 0 to (number-1)
Не настораживает? ;))


>boozook
В Паскале будет именно так, как я написал
var-параметр функции GetProcessHeaps разруливается компилятором как адрес начала буфера.


 
boozook   (2003-04-07 21:45) [7]

1.
alex134 © (06.04.03 00:29)
P.S В коде счетчик цикла от 1 до number, хотя это на дело не влияет...
==> видимо его это не настораживает

2.
А можно туда пометить значение какой-либо переменной, скажем в Buffer[1] содержится указатель на другую область памяти. Просто интересно.


 
Morfein ©   (2003-04-07 22:53) [8]

Функция GetLastError(), вызванная сразу после GetProcessHeaps(), возвращает значение 120. Это соотв. ошибке ERROR_CALL_NOT_IMPLEMENTED.

ERROR_CALL_NOT_IMPLEMENTED
The Application Program Interface (API) entered will only work in WindowsNT mode.



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
1-13149
OlegM
2003-05-26 08:15
2003.06.05
Вопрос по PageControl


1-13113
Song
2003-05-23 08:38
2003.06.05
TListView, родительский TListItem. vsReport


8-13325
greenrul
2003-02-19 12:15
2003.06.05
Как сохранить Canvas в bmp файл?


14-13420
Vlad Oshin
2003-05-19 12:28
2003.06.05
оцените навскидку ноутбук, чтоб мне отвязаться :), пожалуст


8-13330
Garrett
2003-02-23 00:24
2003.06.05
создание вершинного шейдера