#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 действительно должна была определить alt;windows.hppgt;
. с пространством имен C и перегрузкой C .