2015-08-12 27 views
9

Tôi đang phát triển ứng dụng phổ dụng Windows 10, chủ yếu nhắm mục tiêu đến điện thoại Windows. Khi cố gắng sử dụng boost tôi nhận được lỗi như thế này:Sử dụng Boost với ứng dụng phổ dụng Windows 10

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

Theo như tôi hiểu, vấn đề này xảy ra do để thúc đẩy sử dụng win32 api mà không được hỗ trợ trong Windows 10 ứng dụng phổ biến. Tôi đã thử cả 1.58 (bản phát hành chính thức hiện tại) và 1.59 (ứng cử viên phát hành). Có lá cờ nào tôi đang thiếu? Bạn có bất kỳ thông tin nào liên quan đến tăng cường và hỗ trợ ứng dụng toàn cầu của Windows không?


`ve tạo ra chương trình tối thiểu để tái tạo lỗi này:

#include <boost/asio.hpp> 

int main() 
{ 
    return 0; 
} 

Trong thực tế, lỗi đầu tiên tôi nhận được là:

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

báo cáo dưới dạng lỗi và nếu bạn không cần asio loại trừ nó khỏi bản dựng. – user1095108

+0

'FlsAlloc' được phép cho các ứng dụng Store, nhưng' TerminateThread' thì không được; nó là [rất nguy hiểm] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686717 (v = vs.85) .aspx). Bạn có cần bất kỳ cờ đặc biệt nào để xây dựng khả năng tương thích Tăng cường với Cửa hàng không? (Xin lỗi tôi không biết Boost). –

Trả lời

1

Không phải tất cả các thư viện Boost có thể được sử dụng cho Windows Ứng dụng toàn cầu. Làm việc để làm cho nhiều người trong số họ có thể sử dụng được với các ứng dụng Universal đang diễn ra. Dưới đây là thông tin khác: https://blogs.msdn.microsoft.com/vcblog/2014/07/18/using-boost-libraries-in-windows-store-and-phone-applications/

Tác giả bài viết, Steven Gates, đã nhận xét rằng Boost.Asio có khả năng đang sử dụng các API bị cấm. Tôi không thể liên kết với ý kiến ​​cá nhân, vì vậy một phần trích dẫn ở đây (tôi nhấn mạnh):

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.

Ngoài ra, CreateThread, CreateThreadPool, vv không có sẵn trong các ứng dụng Windows Universal.

Có nói ở trên, tôi sẽ giả định rằng bạn sẽ phải sử dụng một cái gì đó khác hơn Boost.Asio, trong đó đây là một số thông tin bổ sung có thể giúp:

Cách khuyến khích để mô phỏng đa luồng là việc sử dụng Task.Run. Bạn cũng có thể sử dụng TaskFactory.StartNew.

Để hoàn thành, đây là danh sách Win32 & COM APIs for Windows Runtime apps. và Alternatives to Windows APIs in Windows Runtime apps.

Hy vọng điều này sẽ hữu ích.

+0

Marcin đang hỏi về C++, tuy nhiên, bạn đang đề xuất sử dụng 'Task.Run' và' TaskFactory.StartNew' không có sẵn trong C++. –

+0

@YuchenZhong - điều đó không hoàn toàn chính xác. Khi sử dụng C++ để tạo UWP, bạn sẽ phải sử dụng các phần mở rộng MS cho C++ cho phép bạn gọi tới các thư viện .NET. Xem ví dụ này trên trang Task.Run trong C++: https://msdn.microsoft.com/en-us/library/hh194921(v=vs.110).aspx?cs-save-lang=1&cs-lang= cpp –

Các vấn đề liên quan