Я занимаюсь разработкой универсального приложения для Windows 10, в основном для телефонов Windows. При попытке использовать повышение я получаю такие ошибки:
boost/asio/detail/impl/win_thread.ipp(48): error C2039: 'TerminateThread': is not a member of '`global namespace''
Насколько я понимаю, эта проблема возникает из-за повышения с помощью Win32 API, который не поддерживается в универсальном приложении Windows 10. Я попробовал и 1.58 (текущий официальный выпуск) и 1.59 (релиз-кандидат). Есть ли какие-нибудь флаги, которые мне не хватает? У вас есть какая-либо информация, связанная с надстройкой и поддержкой универсальных приложений Windows?
Я создал минимальную программу для воспроизведения этой ошибки:
#include <boost/asio.hpp>
int main()
{
return 0;
}
На самом деле первая ошибка, которую я получаю:
c:\program files (x86)\windows kits\10\include\10.0.10240.0\um\processthreadsapi.h(491): error C3861: 'FlsAlloc': identifier not found
Не все библиотеки Boost могут использоваться для универсальных приложений Windows. Работа над тем, чтобы больше из них можно было использовать с приложениями Universal, продолжается. Вот больше информации: https://blogs.msdn.microsoft.com/vcblog/2014/07/18/using-boost-libraries-in-windows-store-and-phone-applications/
Автор статьи Стивен Гейтс комментирует, что Boost.Asio, вероятно, использует запрещенные API. Я не могу ссылаться на отдельные комментарии, поэтому частично цитирую здесь (выделение мое):
Стивен Гейтс
@Li Ning 82: Boost.ASIO зависит от WinSock API, который совсем недавно был разрешен для Windows Phone 8. Однако я готов поспорить, что ASIO использует другие API, которые запрещены, что вам придется заменить.
Кроме того, CreateThread, CreateThreadPool и т. Д. Недоступны в универсальных приложениях Windows.
Сказав выше, я собираюсь предположить, что вам придется использовать что-то другое, а не Boost.Asio, в котором вот некоторая дополнительная информация, которая может помочь:
Рекомендованным способом симуляции многопоточности является использование Task.Run. Вы также можете использовать TaskFactory.StartNew.
Для завершения вот список Win32 & COM API для приложений Windows Runtime. а также Альтернативы API-интерфейсам Windows в приложениях среды выполнения Windows.
Надеюсь это поможет.