none
Включение #include<aclapi.h> вызывает ошибки при построении проекта приложения. RRS feed

  • Вопрос

  • Добрый день.

    В консольном приложении Visual C++ использую тип EXPLICIT_ACCESS. Пишу вроде согласно примеру из MSDN вот отсюда:

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa446595(v=vs.85).aspx

    В программе делаю следующее:

    #include "stdafx.h"
    #include <aclapi.h>
    
    ..........................
    DWORD WINAPI ServerHandleThread(LPVOID p_ThreadInfo)
    {
          .......................
    
          EXPLICIT_ACCESS ea;
          SecureZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
          ea.grfAccessPermissions = KEY_READ;
          ea.grfAccessMode = SET_ACCESS;
          ea.grfInheritance = NO_INHERITANCE;
          ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
          ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
          ea.Trustee.ptstrName = (LPTSTR)pEveryoneSID;
    
          .......................
    }

    При сборке появляется куча ошибок, начиная с следующей:

    Ошибка 4 error C2011: sockaddr: переопределение типа "struct" c:\program files (x86)\windows kits\8.1\include\shared\ws2def.h 217 1 VirtualFileSystemServer

    Потом, например, такая:

    Ошибка 13 error C2011: fd_set: переопределение типа "struct" c:\program files (x86)\windows kits\8.1\include\um\winsock2.h 125 1 VirtualFileSystemServer

    Так же целых 17 предупреждений вот такого типа:

    Предупреждение 1 warning C4005: AF_IPX: изменение макроопределения c:\program files (x86)\windows kits\8.1\include\shared\ws2def.h 96 1 VirtualFileSystemServer

    Но как только убираю include<aclapi.h> и, соответственно, комментирую

    EXPLICIT_ACCESS ea;
    SecureZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
    ea.grfAccessPermissions = KEY_READ;
    ea.grfAccessMode = SET_ACCESS;
    ea.grfInheritance = NO_INHERITANCE;
    ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
    ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
    ea.Trustee.ptstrName = (LPTSTR)pEveryoneSID;
    т.к. иначе появятся ошибки (заголовок-то убран), то проект строится нормально. Как быть? Мне нужно работать с EXPLICIT_ACCESS.

     

    7 июня 2014 г. 11:05

Ответы

  • Такая ошибка может вызываться неправильным порядком включения файлов. Попробуйте создать проект без использования предкомпилированных заголовков и включите все необходимое непосредственно в свои исходники.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Purple_Apple 7 июня 2014 г. 12:54
    7 июня 2014 г. 12:00

Все ответы

  • Такая ошибка может вызываться неправильным порядком включения файлов. Попробуйте создать проект без использования предкомпилированных заголовков и включите все необходимое непосредственно в свои исходники.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Purple_Apple 7 июня 2014 г. 12:54
    7 июня 2014 г. 12:00
  • Да, действительно. Сейчас поставил включение aclapi.h после всех включённых заголовков в том cpp-файле, где используется EXPLICIT_ECCESS и всё стало нормально. Проект строится без ошибок. Спасибо.

    P.S. Но почему именно с #include<aclapi> так происходит ?

    7 июня 2014 г. 12:53