Включите заголовочный файл Windows следующим образом в top ваших .h
или .cpp
файлов:
#include <windows.h>
Это должно решить проблемы, связанные с неопределенными символами, такими какGENERIC_WRITE
и CreateFile
.Как упоминалось в другом постере, вы, как правило, должны писать свой код в .cpp
файлах и объявлять константы или классы только в заголовочных файлах, размещая реализации методов в .cpp
файлах вместе с обычными функциями.
Проблемы, связанные сCreateFileW
как только вы выйдете за пределы этого пункта, вам понадобятся дополнительные пояснения:
По умолчанию приложения Windows, сгенерированные из шаблонов Visual Studio, ссылаются на Unicode (широкие символы) версии API-интерфейсов Windows и имеютUNICODE
Макрос препроцессора C / C ++, определенный для указания этого.Когда определено UNICODE
, препроцессор определяет символ CreateFile
для расширения до имени фактического базового имени функции Windows, которое равно CreateFileW
, где суффикс W
указывает, что это «широкий символ», то есть Unicodeфункция.Если макрос UNICODE
не определен (который можно переопределить с помощью различных настроек проекта Visual Studio), то CreateFile
развернется до символа CreateFileA
, который является именем строковой версии ANSI (A
для ANSI)функции.В 99% случаев вы должны использовать настройки по умолчанию для UNICODE
, так как все современные версии окон используют символы Юникод для внутреннего использования.
Поскольку CreateFileW
принимает строковые аргументы Юникода, вам необходимо передать L"1"
(т.е.строковый литерал широких символов) или используйте макрос TEXT
(например, TEXT("1")
), который будет генерировать правильный тип строки, соответствующий тому, определен ли переключатель компилятора UNICODE
.
Вот ссылка настатья MSDN о TEXT
: ссылка .