Главная страница
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.017 c
1-13180
.::D.e.M.o.N.i.X::.
2003-05-26 17:39
2003.06.05
Опять строки


3-13081
prof
2003-05-08 08:18
2003.06.05
Считывание данных из ячейки


1-13280
$hade
2003-05-22 16:13
2003.06.05
классы...


3-13100
Pat
2003-05-18 23:24
2003.06.05
Опять Access+ADO под ХР


1-13178
super_alex
2003-05-26 13:09
2003.06.05
Мигает bitmap!!! Что делать?