Как описать LPSECURITY_ATTRIBUTES для CreateMutexW

175
22 октября 2018, 07:50

Проблема возникла при описании структуры являющейся одним из параметров функции CreateMutexW - LPSECURITY_ATTRIBUTES. (https://msdn.microsoft.com/ru-ru/56b5b350-f4b7-47af-b5f8-6a35f32c1009) Как ее можно описать на С++, используя стандартные типы, не принадлежащие к WinApi ?

Если кратко выразить мысль, то как правильно описать струтуру LPSECURITY_ATTRIBUTES на языке С++ не прибегая к типам WinApi

Я не разу не пользовался WinApi, но сейчас потребовалось воспользоваться его функционалом. Ситуация следующая, мне нужно импортировать в язык mql5 ряд функций WinApi для созданию мьютекса (https://www.mql5.com/ru/docs/basis/preprosessor/import) Тут во время импорта функций из WinApi подобные структуры описывают сперва. У меня не получается это сделать, поправьте меня если есть ошибка и посоветуйте как сделать правильнее?

Я описываю так:

struct LPSECURITY_ATTRIBUTES {
  unsigned long  nLength;
  void* lpSecurityDescriptor;
  bool   bInheritHandle;
};
#import "kernel32.dll"
  long CreateMutexW(LPSECURITY_ATTRIBUTES &lpMutexAttributes, bool bInitialOwner, string lpName);
#import 

В итоге во время импорта программка жалуется именно на эту структуру. Как бы Вы описали ее на C++ ? Mql5 делался приближенно к плюсам, соответственно те кто на плюсах программируют думаю смогут мне помочь...

Answer 1

Если кому интересно, в итоге погуглив еще немного - я нашел готовое решение того что старался сделать (https://www.mql5.com/ru/code/1835)

Нужно было просто указывать вместо этой структуры - int / long в зависимости от архитектуры.

Answer 2
  1. LPSECURITY_ATTRIBUTES - это указатель на структуру SECURITY_ATTRIBUTES. У вас запись LPSECURITY_ATTRIBUTES &lpMutexAttributes выглядит как передача по ссылке, а не указателю (не знаю, есть ли разница в Mql5).

  2. Тип BOOL в WinAPI соответствует int, не bool

  3. Ну и, обычно при вызове CreateMutex необязательно передавать эту структуру. Можно объявить как int и передавать 0.

READ ALSO
deleteLater при наследовании

deleteLater при наследовании

Представим, что есть класс, производный об QObject:

208
Прозрачность фоновой картинки label в qt

Прозрачность фоновой картинки label в qt

Нужно изменить фон label, а точней сделать его полупрозрачнымПробовал изменить прозрачность в фотошопе, не помогло

195
Как реализовать вектор стеков в C++?

Как реализовать вектор стеков в C++?

Следующая запись выдает ошибку:

178
Проблема с циклами

Проблема с циклами

По моей задумке персонажи меняют своё положение на 1 клетку в одно случайное направление из восьмиПроблема заключается в том, что за цикл...

190