В моем классе C++ я хочу использовать функцию Get API GetFileSizeEx(). Когда я компилирую мой код, составителя сказал:Функция WIN API GetFileSizeEx() не была объявлена в этой области
"error: 'GetFileSizeEx' was not declared in this scope".
Однако другие функции, такие как CreateFile() или WriteFile() работает отлично.
В моем заголовке класса, я объявляю:
#if defined(WINVER) && WINVER==0x0602 /* windows 8 */
#define WINVER 0x0602
#define _WIN32_WINNT 0x0602
#elif defined(WINVER) && WINVER==0x0601 /* windows 7 */
#define WINVER 0x0601
#define _WIN32_WINNT 0x0601
#elif defined(WINVER) && WINVER==0x0600 /* windows vista and server 2008 */
#define WINVER 0x0600
#define _WIN32_WINNT 0x0600
#elif defined(WINVER) && WINVER==0x0502 /* server 2003 */
#define WINVER 0x0502
#define _WIN32_WINNT 0x0502
#elif defined(WINVER) && WINVER==0x0501 /* windows xp */
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#endif
#include <windows.h>
#include <winbase.h>
#include <string>
В моем классе .cpp:
Test::Test()
{
hFile = CreateFile(TEXT("conf/configure_tool.txt"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
canAcces = false;
}else
{
if(GetFileSizeEx(hFile,&sized) != 0)
{
canAcces = true;
}
}
}
У вас возникла идея решить мою проблему?
Этот заголовок, кажется, пытается решить проблему с курицей и яйцом. Наверное, никогда не приходил к яйцу. Избавьтесь от него и просто определите _WIN32_WINNT подходящую версию. 0x502 - это минимум, который вы должны выбрать, если хотите, чтобы ошибка по-прежнему поддерживалась XP, 0x600 в противном случае. –
Хм, хорошо, я начинаю понимать. Если я использую только: #define WINVER 0x0601 #define _WIN32_WINNT 0x0601 Компилятор ответил: «error:« WINVER »переопределено« Возможно, у меня проблема с этим макросом, и поэтому мой предыдущий код не работает? – ExecAssa
Есть ли особая причина, по которой вы определяете 'WINVER' и' _WIN32_WINNT' в коде вместо ваших настроек проекта? –