Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 30

LPBYTE* как аргумент в функциях

16.05.2017, 16:48. Показов 2764. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Использую функцию:

NET_API_STATUS NetGroupGetUsers(
_In_ LPCWSTR servername,
_In_ LPCWSTR groupname,
_In_ DWORD level,
_Out_ LPBYTE *bufptr,
_In_ DWORD prefmaxlen,
_Out_ LPDWORD entriesread,
_Out_ LPDWORD totalentries,
_Inout_ PDWORD_PTR ResumeHandle
);

Меня интересует как работает отмеченный красным аргумент LPBYTE *bufptr.
Нашел похожий пример на сайте MS:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdio.h>
#include <assert.h>
#include <windows.h> 
#include <lm.h>
 
int wmain(int argc, wchar_t *argv[])
{
   LPGROUP_USERS_INFO_0 pBuf = NULL;
   DWORD dwLevel = 0;
   DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
   DWORD dwEntriesRead = 0;
   DWORD dwTotalEntries = 0;
   NET_API_STATUS nStatus;
 
   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   //
   // Call the NetUserGetGroups function, specifying level 0.
   //
   nStatus = NetUserGetGroups(argv[1],
                              argv[2],
                              dwLevel,
                              (LPBYTE*)&pBuf,
                              dwPrefMaxLen,
                              &dwEntriesRead,
                              &dwTotalEntries);
   //
   // If the call succeeds,
   //
   if (nStatus == NERR_Success)
   {
      LPGROUP_USERS_INFO_0 pTmpBuf;
      DWORD i;
      DWORD dwTotalCount = 0;
 
      if ((pTmpBuf = pBuf) != NULL)
      {
         fprintf(stderr, "\nGlobal group(s):\n");
         //
         // Loop through the entries; 
         //  print the name of the global groups 
         //  to which the user belongs.
         //
         for (i = 0; i < dwEntriesRead; i++)
         {
            assert(pTmpBuf != NULL);
 
            if (pTmpBuf == NULL)
            {
               fprintf(stderr, "An access violation has occurred\n");
               break;
            }
 
            wprintf(L"\t-- %s\n", pTmpBuf->grui0_name);
 
            pTmpBuf++;
            dwTotalCount++;
         }
      }
      //
      // If all available entries were
      //  not enumerated, print the number actually 
      //  enumerated and the total number available.
      //
      if (dwEntriesRead < dwTotalEntries)
         fprintf(stderr, "\nTotal entries: %d", dwTotalEntries);
      //
      // Otherwise, just print the total.
      //
      printf("\nEntries enumerated: %d\n", dwTotalCount);
   }
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);
   //
   // Free the allocated buffer.
   //
   if (pBuf != NULL)
      NetApiBufferFree(pBuf);
 
   return 0;
}
Подскажите пожалуйста в двух словах как работает конструкция - (LPBYTE*)&pBuf, или ткните в статью где про это написано, или же обозначте что это за процедура.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2017, 16:48
Ответы с готовыми решениями:

Как перевести lpbyte в string?
Собственно сабж в теме, был вариант в цыкле перебирать lpbyte и сохранять в стринг, это логично? или есть способы проще? и еще вопрос, в...

Функция, возвращает квадрат аргумента, если аргумент число; хвост списка, если аргумент список; иначе сам аргумент
Помогите, пожалуйста, с заданием: Написать функцию, которая возвращает квадрат аргумента, если аргумент число; хвост списка, если аргумент...

LPBYTE в C#
Есть dll(написаная на с++) с которой мне нужно вызвать функцию. IeOutput (UINT16 pad, UINT16 sad, LPBYTE buffer, LPUINT16 count);вот...

3
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
20.05.2017, 19:49
префикс _Out_ означает, что после выполнения функции в данную переменную будут записаны значения, которые обработала эта функция.
PBYTE это указатель на BYTE, в данном случае это указатель на ссылку на ссылку (указатель байта по адресу по адресу).
1
58 / 14 / 5
Регистрация: 07.04.2017
Сообщений: 58
20.05.2017, 20:26
(как аргумент функции)указатель на указатель - адрес указателя. Используется для того, чтобы выделить в функции память и присвоить адрес этой памяти твоему указателю.
Цитата Сообщение от Egorych Посмотреть сообщение
(LPBYTE*)&pBuf
это приведение типа, в данном случае в си-стиле.
ознакомиться
Т.к. c++ типизированный язык, нужно явно указывать, что ты про, и знаешь, что делаешь.
1
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
21.05.2017, 11:01
Цитата Сообщение от _lunar_ Посмотреть сообщение
в данном случае это указатель на ссылку на ссылку
В Си нет ссылок.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2017, 11:01
Помогаю со студенческими работами здесь

Преобразовать string в LPBYTE
Подскажите, как это сделать?

Ввести аргумент x, если аргумент попадает в область допустимых значений, вычислить значение выражения
Ввести аргумент x с помощью клавиатуры и определить, попадает ли он в область допустимых значений. Вслучае попадания аргумента x в...

Как настроить timer в функциях
У меня такая проблема. Я сделала таймер и и сделала его запуск при нажатии определенной кнопки (btnShowPictures). То есть после нажатия на...

Как использовать компоненты формы в функциях?
Есть компонент для работы с БД. Как мне использовать его внутри функции? Так не работает: function bal(id:Word):Currency; var...

Cpp. Как очищается память в функциях?
Я привык, что чисткой памяти занимается GC. А тут надо написать библиотеку на Cpp. От сюда базовые вопросы: Как себя ведет память в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru