如何替换WSAStartup(MAKEWORD(2,2),和数据);与助推器:ASIO?

how to replace WSAStartup( MAKEWORD(2, 2), &data ); with boost:asio?

本文关键字:助推器 ASIO 数据 WSAStartup MAKEWORD 何替换 替换      更新时间:2023-10-16

我有本机dll项目,我通过CLI包装器从c#使用。在dll的Initialize方法中,我调用

WSAStartup(MAKEWORD(2, 2), &data);

这很好。现在我决定把整个dll移到boost::asio(因为我要把它移植到Linux上,我想启用/Za编译器选项)。

问题是-我应该在哪里以及如何取代WSAStartup呼叫?

  • 将其移动到CLI包装器或顶级c#项目?
  • 用一些boost::asio调用(调用哪个方法?)

Boost.Asiomain()之前初始化Winsock -它为此目的使用静态对象。以下是winsock_init.hpp的节选:

// Static variable to ensure that winsock is initialised before main, and
// therefore before any other threads can get started.
static const winsock_init<>& winsock_init_instance = winsock_init<>(false);

所以,在你的例子中,Winsock将在dll加载时被初始化。

(也就是说,恐怕你不能用/Za在Windows下编译Asio,但你也不必这样做,以使你的代码可移植到Linux。)