Я использую полную версию 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"
DeleteFile
должен быть макросом, расширяющимся доDeleteFileA
илиDeleteFileW
(и аналогично дляMoveFile
). Что-то вAllowWindowsPlatformTypes.h
#undef
их. - person Igor Tandetnik   schedule 13.06.2014IFDYNAMICGETCACHEDFUNCTION(L"kernel32.dll", SetDefaultDllDirectories, pfSetDefaultDllDirectories)
- person Yattabyte   schedule 13.06.2014