2015-08-12 13 views
9

Pracuję nad uniwersalną aplikacją systemu Windows 10, przeznaczoną głównie na telefony z systemem Windows. Kiedy próbują wykorzystać impuls otrzymuję błędy tak:Korzystanie z funkcji Zwiększ z uniwersalną aplikacją Windows 10

boost/asio/detail/impl/win_thread.ipp(48): error C2039: 'TerminateThread': is not a member of '`global namespace'' 

O ile mi zrozumieć ten problem występuje z powodu zwiększenia użyciu API Win32, które nie są obsługiwane w systemie Windows 10 uniwersalnego. Próbowałem zarówno 1.58 (aktualne oficjalne wydanie) i 1.59 (release candidate). Czy są jakieś flagi, których mi brakuje? Czy masz jakieś informacje związane z doładowaniem i obsługą uniwersalnej aplikacji Windows?


`ve utworzony minimalny program odtworzyć ten błąd:

#include <boost/asio.hpp> 

int main() 
{ 
    return 0; 
} 

W rzeczywistości pierwszy błąd pojawia się:

c:\program files (x86)\windows kits\10\include\10.0.10240.0\um\processthreadsapi.h(491): error C3861: 'FlsAlloc': identifier not found 
+1

Zgłoś jako błąd, a jeśli nie potrzebujesz, to usuń go z kompilacji. – user1095108

+0

'FlsAlloc' jest dozwolone dla aplikacji Store, ale' TerminateThread' nie jest; jest [bardzo niebezpieczny] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686717 (v = vs.85) .aspx). Czy potrzebujesz specjalnych flag do budowania zgodności Boost with Store? (Przepraszam, nie wiem, Boost). –

Odpowiedz

1

Nie wszystkie biblioteki wzmacniającej może być stosowany dla Windows Aplikacje uniwersalne. Dążymy do tego, aby coraz więcej z nich było dostępnych dzięki aplikacjom Universal. Oto więcej informacji: https://blogs.msdn.microsoft.com/vcblog/2014/07/18/using-boost-libraries-in-windows-store-and-phone-applications/

Autor postu, Steven Gates, ma komentarze wskazujące, że Boost.Asio prawdopodobnie używa zabronionych API. Nie jestem w stanie połączyć się do poszczególnych uwag, więc częściowo przytoczyć tutaj (mój nacisk):

Steven Gates @Li Ning 82: Boost.ASIO depends on the WinSock API, which just recently is now allowed on Windows Phone 8. However I'd bet that ASIO is using other APIs that are banned, that you'd have to replace.

Również CreateThread, CreateThreadPool itp nie są dostępne w systemie Windows uniwersalnych aplikacji.

Powiedziawszy powyższe, mam zamiar założyć, że będziesz musiał użyć czegoś innego niż Boost.Asio, w którym oto kilka dodatkowych informacji, które mogą pomóc:

Zalecany sposób symulować wielowątkowość jest użycie Task.Run. Możesz także użyć TaskFactory.StartNew.

Aby zakończyć, poniżej znajduje się lista Win32 & COM APIs for Windows Runtime apps. i Alternatives to Windows APIs in Windows Runtime apps.

Mam nadzieję, że to pomoże.

+0

Marcin pyta o C++, jednak sugerujesz użycie 'Task.Run' i' TaskFactory.StartNew', który nie jest dostępny w C++. –

+0

@YuchenZhong - to nie do końca poprawne. Używając C++ do tworzenia UWP, będziesz musiał używać rozszerzeń MS do C++, które pozwolą Ci zadzwonić do bibliotek .NET. Zobacz ten przykład na stronie Task.Run w C++: https://msdn.microsoft.com/en-us/library/hh194921(v=vs.110).aspx?cs-save-lang=1&cs-lang= cpp –

Powiązane problemy