Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2021, 10:27   #1
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 45
По умолчанию Как получить дескриптор?

Например к SCManager.
Функция OpenSCManagerA ссылка или OpenSCManagerW - не важно.
Код:
SC_HANDLE OpenSCManagerA(
  LPCSTR lpMachineName,
  LPCSTR lpDatabaseName,
  DWORD  dwDesiredAccess
);
Пробую так:

Код:
#include <windows.h>
int main()

SC_HANDLE OpenSCManagerA(
  NULL,
  NULL,
  SC_MANAGER_ALL_ACCESS
)
GCC ругается, просит инициализацию.
Цитата:
|4|error: expected initializer before 'SC_HANDLE'|
С++ только начал учить. С окнами вроде как разобрался, а вот как вызывать APIшные функции не могу понять. Мозги уже кипят. Помогите пжл.

P.S. IDE Code::Block
druidvic вне форума Ответить с цитированием
Старый 01.07.2021, 12:19   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
С окнами вроде как разобрался
Не похоже.

Прочитайте главу в любой книжке по С++ про функции. Узнайте, как они вызываются.
ForenLi вне форума Ответить с цитированием
Старый 01.07.2021, 16:51   #3
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 45
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Прочитайте главу в любой книжке по С++ про функции. Узнайте, как они вызываются.
Думаете я не читал? Читал, вот только полного листинга найти не смог. Вернее смог, но если выдернуть код из контекста, то не собирается. А в листинге 100-200 строк разобраться мне слабо :-(
В и-нете в основном такие примеры:
Цитата:
Открытие базы данных SCManager
Код:
#include <windows.h>
#include <stdio.h>

SC_HANDLE schSCManager;

// Открываем дескриптор базы данных SC Manager. 
 
schSCManager = OpenSCManager( 
    NULL,                    // локальная машина 
    NULL,                    // база данных ServicesActive 
    SC_MANAGER_ALL_ACCESS);  // полные права доступа 
 
if (NULL == schSCManager) 
    printf("OpenSCManager failed (%d)\n", GetLastError());
Которые, конечно, не работают.
druidvic вне форума Ответить с цитированием
Старый 01.07.2021, 17:12   #4
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
Думаете я не читал?
Уверен.

Цитата:
Сообщение от druidvic Посмотреть сообщение
Читал, вот только полного листинга найти не смог.
Листинга вызова функции?

Цитата:
Сообщение от druidvic Посмотреть сообщение
Которые, конечно, не работают.
И в чем это проявляется?
ForenLi вне форума Ответить с цитированием
Старый 01.07.2021, 17:31   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
Которые, конечно, не работают.
А я вот не поленился и проверил как раз тот кусок кода - все прекрасно работает.
waleri вне форума Ответить с цитированием
Старый 02.07.2021, 02:54   #6
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 45
По умолчанию

Цитата:
А я вот не поленился и проверил как раз тот кусок кода - все прекрасно работает.
Значит Вам легче. В чем собирали?

У меня выдает 2 ошибки:
Цитата:
||=== Build: Debug in openscmanager (compiler: GNU GCC Compiler) ===|
D:\Projects\CodeBlock\openscmanager \sc1.cpp|6|error: 'schSCManager' does not name a type; did you mean 'OpenSCManager'?|
D:\Projects\CodeBlock\openscmanager \sc1.cpp|11|error: expected unqualified-id before 'if'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|
druidvic вне форума Ответить с цитированием
Старый 02.07.2021, 04:08   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
У меня выдает 2 ошибки
Так вы код поместите в функцию main хотя бы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.07.2021, 04:39   #8
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 45
По умолчанию

Цитата:
Так вы код поместите в функцию main хотя бы.
Говорил же что мозги кипят. Совсем плохой стал
Вот так собрался и отработал.
Код:
#include <windows.h>
#include <stdio.h>
int main()
{
SC_HANDLE schSCManager;
schSCManager=OpenSCManager(
  NULL,
  NULL,
  SC_MANAGER_ALL_ACCESS);

  if (NULL == schSCManager)
    printf("OpenSCManager failed (%d)\n", GetLastError());
}
Осталось с warning: format '%d' expects argument of type 'int', but argument 2 has type 'DWORD' {aka 'long unsigned int'} [-Wformat=]|
разобраться.
druidvic вне форума Ответить с цитированием
Старый 02.07.2021, 06:28   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Или жить с варнингами, или использовать спецификатор %ld, или перейти на вывод с помощью cout.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.07.2021, 13:58   #10
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 45
По умолчанию

Всем спасибо за помощь. Теперь стало все более-менее понятно.
Окончательный вариант такой:
Код:
#include <windows.h>
#include <stdio.h>

int main()
{
SC_HANDLE  schSCManager; // инициализация

schSCManager=OpenSCManager(
  NULL,
  NULL,
  SC_MANAGER_ALL_ACCESS);

  if (NULL == schSCManager)
    printf("OpenSCManager failed (%ld)\n", GetLastError());
}
//где %ld - Спецификатор формата для функции printf()
P.S. Если у кого-то будут уточнения, предупреждения и т.д. по коду буду признателен.
druidvic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить иконку зная дескриптор? pavellyba Общие вопросы Delphi 0 25.09.2011 01:08
Как правильно получить дескриптор на устройство Master_Devel Win Api 2 24.05.2011 23:54
Получить дескриптор дочернего окна Crudelis Win Api 1 15.10.2010 21:45
как получить дескриптор приложения в C#? fiatik Общие вопросы .NET 1 08.11.2008 08:18