Отключение функции Win32 во время компиляции

#c #visual-studio #winapi

Вопрос:

Сталкиваюсь здесь со странной и раздражающей ситуацией…Я использую код из проекта с открытым исходным кодом, в котором есть функция под названием DeleteFile(std::строковое имя файла). Однако, если я вызову DeleteFile(«строка const»), он вместо этого сбрасывается в версию Win32.

Есть ли какой-то способ выборочно отключить определенные функции Win32 во время компиляции? #pragma обесценилась предупредит меня, но что я действительно хочу, так это полностью не объявлять версию Win32 DeleteFile вообще в каком-либо заголовке.

Комментарии:

1. не включайте windows.h или используйте #undef DeleteFile (в нужном месте)

2. альтернативно вы можете преобразовать свою «строку const» в строку std::. Разрешение перегрузки должно справляться с этим просто отлично, если версия с открытым исходным кодом определена после включения «windows.h».

3. @KiraHoneybee большинство функций Win32, которые имеют дело со строками, реализованы в виде макросов предварительного компилятора, которые сопоставляются соответствующим W функциям (Wide) или A (ANSI) в зависимости от того UNICODE , определены они или нет соответственно.

4. Из любопытства, что DeleteFile() на самом деле делает функция из вашей библиотеки с открытым исходным кодом?

5. @engf-010: Проблема с «разрешением перегрузки» заключается в том , что макрос windows.h может изменить ваш вызов DeleteFileA , в то время как функция по-прежнему определена как DeleteFile без A . Это приведет к ошибке компоновщика. Microsoft действительно должна была определить a lt;windows.hppgt; . с пространством имен C и перегрузкой C .