C++ 如何替换WSAStartup(MAKEWORD(2,2)和数据);用boost:asio?

C++ 如何替换WSAStartup(MAKEWORD(2,2)和数据);用boost:asio?,c++,boost,boost-asio,winsock,wsastartup,C++,Boost,Boost Asio,Winsock,Wsastartup,我有一个本地dll项目,我通过CLI包装器从C#使用它。在我调用的dll的初始化方法中 WSAStartup(MAKEWORD(2, 2), &data); 这个很好用。 现在我决定将整个dll移到boost::asio(因为我将把它移植到Linux,并且我想启用/Za编译器选项) 问题是-我应该在哪里以及如何替换WSAStartupcall 是否将其移动到CLI包装器或顶级C#项目 用一些boost::asio调用替换它(调用哪个方法?) Boost.Asio在main()之前初始

我有一个本地dll项目,我通过CLI包装器从C#使用它。在我调用的dll的
初始化
方法中

WSAStartup(MAKEWORD(2, 2), &data);
这个很好用。 现在我决定将整个dll移到boost::asio(因为我将把它移植到Linux,并且我想启用/Za编译器选项)

问题是-我应该在哪里以及如何替换
WSAStartup
call

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

Boost.Asio
main()
之前初始化
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在main之前初始化的静态变量,以及
//因此,在任何其他线程开始之前。
静态常量winsock_init&winsock_init_实例=winsock_init(false);
因此,在您的情况下,
Winsock
将在加载dll时进行初始化

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

我不需要编译Asio(我已经编译过了:),只在我的项目中使用它