Что является различием между WIN32, и _WIN32 определяет в C++

Базовый класс BotAdapter предоставляет метод use для регистрации промежуточного программного обеспечения. Таким образом, в вашей логике запуска вы создадите конкретную реализацию BotAdapter, обычно BotFrameworkAdapter, а затем добавите к ней промежуточное ПО. Вот так:

const botAdapter = new BotFrameworkAdapter( { /* credential stuff here*/ });

// Simple handler based
botAdapter.use(async (turnContext, next) => {
    // pre logic

    await next();

    // post logic
});

// Or class based
botAdapter.use(new MyMiddleware());
69
задан Adam Naylor 16 March 2019 в 13:33
поделиться

3 ответа

WIN32 имя, которое Вы могли использовать и даже определить в своем собственном коде и так могли бы столкнуться с использованием Microsoft. _WIN32 имя, которое резервируется для конструктора (в этом случае Microsoft), потому что это начинается с подчеркивания и прописной буквы - Нельзя определить зарезервированные имена в Вашем собственном коде, таким образом, не может быть никакого столкновения.

49
ответ дан 24 November 2019 в 13:46
поделиться

WIN32 является пользовательским флагом, который может требоваться некоторыми заголовками. _WIN32 автоматически определяется визуальным компилятором C/C++. Так как это начинается _ сопровождаемый прописным символом, это резервируется реализацией (значение поставщика набора инструментальных средств C/C++).

я предпочитаю использовать (чтение) _WIN32, кажется более безопасным мне.

19
ответ дан 24 November 2019 в 13:46
поделиться

Для разработки (Neil Butterworth и blue.tuxedo уже дали корректный ответ):

  • WIN32 определяется SDK или средой сборки, таким образом, это не использует зарезервированное пространство имен
  • _WIN32 реализации, определяется компилятор , таким образом, это использует подчеркивание для размещения его в зарезервированное реализацией пространство имен

, Вы найдете, что подобный набор двойных определяет почти с идентичными именами и подобным использованием такой как _UNICODE / UNICODE, _DEBUG / DEBUG, или возможно _DLL / DLL (я думаю, что только UNICODE получают большую часть любого использования в их различных версиях). Хотя иногда в этих случаях (как _UNICODE), вместо версии подчеркивания, определяемой [1 115] компилятор, они используются для управления тем, что делают заголовки CRT:

  • _UNICODE говорит заголовкам CRT, что имена CRT, которые могут быть или Unicode или ANSI (такой как [1 110] должен отобразиться на вариант широкого символа (wcslen())
  • UNICODE, делают что-то подобное для SDK (отображает API Win32 на их" W" варианты)

По существу, версиями с подчеркиванием управляет или использует команда компилятора, версии без подчеркивания управляются/используются командами за пределами компилятора. Конечно, там вероятно, будет много перекрытия из-за совместимости с прошлыми версиями и просто общими ошибками одной командой или другим.

я нахожу его путающий как ад - и нахожу, что они используются почти попеременно в пользовательском коде (обычно, когда Вы будете видеть определенный тот, Вы будете видеть другой определенный в том же месте, потому что при необходимости в том, Вам нужен другой). Лично, я думаю, что Вы должны использование версии без подчеркивания (если Вы не пишете время выполнения компилятора), и удостоверьтесь, что они оба определяются (переключается ли через слушателей или компилятор как соответствующий), когда Вы определяете тот.

<час>

Примечание, которое SDK определит _WIN32 при создании для Mac, потому что компилятор не делает, вид перешагивания, это - границы. Я не уверен, какие проекты используют API Win32 компилятор, предназначающийся для Mac - возможно, некоторая версия Office для Max или чего-то.

77
ответ дан 24 November 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: