Atlbase не будет корректно включаться в Unreal Engine 4

Я использую полную версию VS2013 и пытаюсь включить atlbase в класс вместе со sphelper, но я получаю различные типы ошибок.

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

Компилятор находит библиотеки и, кажется, загружает их, но затем я получаю около 20 ошибок, которые в значительной степени похожи на эти (остальные я пропустил, но они все такие же, как эти)

1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atlcore.h(630): warning C4191: 'reinterpret_cast' : unsafe conversion from 'FARPROC' to 'BOOL (__cdecl *)(DWORD)'
1>          Calling this function through the result pointer may cause your program to fail
1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atltransactionmanager.h(271): warning C4191: 'type cast' : unsafe conversion from 'FARPROC' to 'PFNCREATETRANSACTION'
1>          Calling this function through the result pointer may cause your program to fail
1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atltransactionmanager.h(321): warning C4191: 'type cast' : unsafe conversion from 'FARPROC' to 'PFNCOMMITTRANSACTION'
1>          Calling this function through the result pointer may cause your program to fail
1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atltransactionmanager.h(427): error C2039: 'DeleteFile' : is not a member of '`global namespace''
1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atltransactionmanager.h(448): warning C4191: 'type cast' : unsafe conversion from 'FARPROC' to 'PFNMOVEFILETRANSACTED'
1>          Calling this function through the result pointer may cause your program to fail
1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atltransactionmanager.h(460): error C2039: 'MoveFile' : is not a member of '`global namespace''
1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atltransactionmanager.h(487): warning C4191: 'type cast' : unsafe conversion from 'FARPROC' to 'PFNGETFILEATTRIBUTESTRANSACTED'
1>E:\Programs\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atlbase.h(5766): warning C4191: 'type cast' : unsafe conversion from 'FARPROC' to 'LSTATUS (__cdecl *)(HKEY,LPCWSTR,REGSAM,DWORD)'
1>          Calling this function through the result pointer may cause your program to fail
1>C:\Program Files (x86)\Windows Kits\8.1\include\um\sphelper.h(1333): warning C4191: 'type cast' : unsafe conversion from 'FARPROC' to 'LPFN_RegLoadMUIStringW'
1>          Calling this function through the result pointer may cause your program to fail

Эти ошибки появляются только после включения файлов atlbase.h и / или sphelper.h. Половина из них от первого, другая половина от второго.

Они включены следующим образом (под моим проектом и включением заголовка класса):

#include <stdio.h>
#include <Windows.h>

#include "AllowWindowsPlatformTypes.h"#include <atlbase.h>
#include "sphelper.h"#include "HideWindowsPlatformTypes.h"

У меня они есть в этом блоке «типы платформ», потому что библиотеки atlbase и sphelper в противном случае выдают непристойное количество ошибок, связанных с произвольными объявлениями или чем-то еще.

Я никоим образом не редактировал файлы библиотеки, полностью удалил все библиотеки и переустановил их с нуля.

Это может быть связано с недосмотром или чем-то с моей стороны, но может ли кто-нибудь объяснить, почему библиотеки atl и sphelper не будут корректно включены?

Редактировать:

Чтобы уточнить, решение проблемы, в которой я «решил», что привело к этой проблеме, я нашел на «https://answers.unrealengine.com/questions/27560/trouble-using-windows-includes-with-dword-int.html«

2

Решение

Я разместил свою проблему на более конкретном сайте и получил ответ там.

Пользователь Jamie Dale разместил следующее на UE4 AnswerHub

#include "AllowWindowsPlatformTypes.h"

#pragma warning(push)
#pragma warning(disable: 4191) // warning C4191: 'type cast' : unsafe conversion
#pragma warning(disable: 4996) // error C4996: 'GetVersionEx': was declared deprecated

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

// atltransactionmanager.h doesn't use the W equivalent functions, use this workaround
#ifndef DeleteFile
#define DeleteFile DeleteFileW
#endif
#ifndef MoveFile
#define MoveFile MoveFileW
#endif

#include <atlbase.h>

#undef DeleteFile
#undef MoveFile

#include <sphelper.h>

#pragma warning(pop)

#include "HideWindowsPlatformTypes.h"

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

2

Другие решения


По вопросам рекламы [email protected]