Форум: "WinAPI";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c