Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.01 c
3-13016
Дмитрий Юрьевич Грицай
2003-05-16 08:14
2003.06.05
Interbase & generator


6-13358
JibSkeart
2003-03-28 18:49
2003.06.05
Глюк или как с Socket-ом ?


3-13063
Andrey02
2003-05-17 17:46
2003.06.05
Изображения в БД MS Access и Delphi ADO


1-13200
Max Melnik
2003-05-27 08:21
2003.06.05
INI > 64KB


14-13417
Дмитрий К.К.
2003-05-19 06:09
2003.06.05
Именинники 19 мая





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский