Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Почему lProcesses в EnumProcesses пустует ? Добавлено: 12.06.11 16:00  

Автор вопроса:  Wlad | ICQ: 6977577 
Собственно,такой код должен работать:



Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long

Dim aPID() As Long
ReDim aPID(255)
Dim lProcesses As Long

EnumProcesses(aPID(0), 1024, lProcesses)



Пример взят из VB6,но почему aPID(0) именно передается и почему 256 элементов всего - непонятно.Также функция должна возвращать Boolean,а там стоит Long...И в МСДН булеан.

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #1 Добавлено: 12.06.11 19:34
Передается нулевой элемент массива, точнее его адрес в памяти. (ByRef lpidProcess As Long)
Зная его, функция заполнит адреса памяти последовательно, т.к. она предполагает, что программист удосужился выделить их.
И это сделано - ReDim aPID(255).
ByVal cb As Long = 1024 - это видимо длина массива в байтах (256 элементов * sizeof(long))
Проделав свою работу, функция передаст количество записанных байт в cbNeeded. Раздели на sizeof(long) - получишь количество заполненных элементов.
Тип возвращаемого значения BOOL - 32 битное целое, подойдет вообщем-то любой тип с той же длиной, но традиция...
Почему именно 256 элементов? Это наивное предположение о том, что в системе не может быть больше процессов.

Ответить

Номер ответа: 2
Автор ответа:
 Wlad



ICQ: 6977577 

Вопросов: 3
Ответов: 9
 Профиль | | #2 Добавлено: 12.06.11 20:22
Благодарю за объяснение,но всё равно почему-то в lProcesses сохраняется 0...

Ответить

Номер ответа: 3
Автор ответа:
 Wlad



ICQ: 6977577 

Вопросов: 3
Ответов: 9
 Профиль | | #3 Добавлено: 12.06.11 20:25
http://www.thescarms.com/vbasic/VB6vsVBNet.aspx Всё-таки тут на 8 умножать надо,а не на 4,как я думал...Но проблема всё та же(

Ответить

Номер ответа: 4
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #4 Добавлено: 12.06.11 20:40
Ладно, блин, теперь по-русски: нет никакой проблемы!
тип лонг в вбнет - восемь байт, все декларации из вбшесть предполагают что лонг - четыре байта. Функция EnumProcesses тоже хочет 4 байта. Все объявления в вбнет смени лонг на интегер.

Ответить

Номер ответа: 5
Автор ответа:
 Wlad



ICQ: 6977577 

Вопросов: 3
Ответов: 9
 Профиль | | #5 Добавлено: 12.06.11 20:46
Эх,всё заработало,но всё равно в голове не укладывается... Ок,вернуло число 392 - это число,как я понимаю,DWORD типа.392/4 = число моих процессов в системе(1 процесс = 1 PID),или это другой какой-то PID ?

Ответить

Номер ответа: 6
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #6 Добавлено: 12.06.11 20:51
Все верно, 1 процесс = 1 идентификатор. Это его уникальный номер, покуда жив процесс, система гарантирует, что дубля не будет.

Ответить

Номер ответа: 7
Автор ответа:
 Wlad



ICQ: 6977577 

Вопросов: 3
Ответов: 9
 Профиль | | #7 Добавлено: 12.06.11 20:58
Благодарю за ответ,тему можно закрыть = )).

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам