got "PDWord" expected "LongInt"

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

got "PDWord" expected "LongInt"

Сообщение modjo » 09.04.2010 09:47:52

При копиляции выскакивает ошибка:

main.pas(186,30) Error: Incompatible types: got "PDWord" expected "LongInt"

Сам код:
Код: Выделить всё
function GetUsersSession : String;
var
  level, prefmaxlen                        : DWORD;
  bufptr                                   : LPBYTE;
  totalentries, entriesread, resume_handle : PDWORD;
  servername, UncClientName, username      : LPWSTR;
  Err                                      : NET_API_STATUS;
  i                                        : Integer;
begin
  servername := nil;
  UncClientName := nil;
  username := nil;
  level := 502;
  bufptr := nil;
  prefmaxlen:= DWORD(-1);
  resume_handle := nil;
  i := 0;
  GetUsersSession := 'Неизвестно';
  Err := NetSessionEnum(servername, UncClientName, username, level, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
  if Err = NERR_Success then
    for i := 0 to entriesread-1 do              // <- ERROR
      GetUsersSession := IntToStr(i);
  if bufptr <> nil then
    NetApiBufferFree(bufptr);
end;


Подскажите как entriesread конвертнуть в integer (longint)?
modjo
новенький
 
Сообщения: 92
Зарегистрирован: 19.07.2009 15:52:10
Откуда: Москва

Re: got "PDWord" expected "LongInt"

Сообщение Mr.Smart » 09.04.2010 11:22:21

работа с указателями
Код: Выделить всё
entriesread^
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: got "PDWord" expected "LongInt"

Сообщение modjo » 09.04.2010 11:38:41

access violation теперь.
modjo
новенький
 
Сообщения: 92
Зарегистрирован: 19.07.2009 15:52:10
Откуда: Москва

Re: got "PDWord" expected "LongInt"

Сообщение Дож » 09.04.2010 11:48:31

New(entriesread) не нужно делать? Или надеешься на то, что NetSessionEnum сам это сделает?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: got "PDWord" expected "LongInt"

Сообщение modjo » 09.04.2010 11:59:11

Не понял. Где я должен был это воткнуть?
modjo
новенький
 
Сообщения: 92
Зарегистрирован: 19.07.2009 15:52:10
Откуда: Москва

Re: got "PDWord" expected "LongInt"

Сообщение Mr.Smart » 09.04.2010 12:03:08

Сделай лучше так:
Код: Выделить всё
function GetUsersSession : String;
var
  level, prefmaxlen                        : DWORD;
  bufptr                                   : LPBYTE;
  totalentries, entriesread, resume_handle : DWORD;
  servername, UncClientName, username      : LPWSTR;
  Err                                      : NET_API_STATUS;
  i                                        : Integer;
begin
  servername := nil;
  UncClientName := nil;
  username := nil;
  level := 502;
  bufptr := nil;
  prefmaxlen:= DWORD(-1);
  resume_handle := nil;
  i := 0;
  GetUsersSession := 'Неизвестно';
  Err := NetSessionEnum(servername, UncClientName, username, level, bufptr, prefmaxlen, @entriesread, @totalentries, @resume_handle);
  if Err = NERR_Success then
    for i := 0 to entriesread-1 do             
      GetUsersSession := IntToStr(i);
  if bufptr <> nil then
    NetApiBufferFree(bufptr);
end;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: got "PDWord" expected "LongInt"

Сообщение modjo » 09.04.2010 13:16:23

Я вижу два изменения.

totalentries, entriesread, resume_handle : DWORD;

Не рабочий вариант. http://msdn.microsoft.com/en-us/library/bb525382(VS.85).aspx Там вообще должно быть LPDWORD, "что на нашем языке" PDWORD.
modjo
новенький
 
Сообщения: 92
Зарегистрирован: 19.07.2009 15:52:10
Откуда: Москва

Re: got "PDWord" expected "LongInt"

Сообщение Дож » 09.04.2010 13:33:09

Кажется кое-кто никогда не работал с указателями :) В коде Mr.Smart передаются не сами переменные, а указатели на них (с префиксной @).

А если через new, то втыкакать перед использованием - перед NetSessionEnum. И еще после использования вставить dispose в конец. Это на каждую PDWORD.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: got "PDWord" expected "LongInt"

Сообщение modjo » 09.04.2010 14:21:40

Ваша правда. Как-то без них обходился. Попробую разобраться. Спасибо за подсказки. Сильно не пинайте, если ещё будут глупые вопросы. :oops:
modjo
новенький
 
Сообщения: 92
Зарегистрирован: 19.07.2009 15:52:10
Откуда: Москва

Re: got "PDWord" expected "LongInt"

Сообщение modjo » 12.04.2010 12:12:56

В общем я подизучил вопрос. Но потом понял, что NetSessionEnum выдает мне пустоту. Буфер пустой, entriesread тож пуст. Почитав немного про функцию, набрел на исходники и уже там понял что нужно ещё использовать GetProcAddress. Топчусь на одном месте ...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
modjo
новенький
 
Сообщения: 92
Зарегистрирован: 19.07.2009 15:52:10
Откуда: Москва


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru