Использование Boost с универсальным приложением Windows 10

Я занимаюсь разработкой универсального приложения для 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

10

Решение

Не все библиотеки 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.

Надеюсь это поможет.

3

Другие решения


По вопросам рекламы [email protected]