Как заменить WSAStartup( MAKEWORD(2, 2) и данные); с наддувом:asio?
У меня есть родной проект DLL, который я использую из C# через оболочку CLI. В Initialize
метод длл я звоню
WSAStartup(MAKEWORD(2, 2), &data);
Это отлично работает. Теперь я решил переместить всю dll в boost::asio (потому что я перенесу ее на Linux и хочу включить опцию компилятора /Za).
Вопрос - где и как заменить WSAStartup
вызов?
- переместить его в оболочку CLI или в проект C# верхнего уровня?
- замените его некоторым вызовом boost::asio (какой метод вызывать?)
1 ответ
Boost.Asio
инициализируется Winsock
до main()
- он использует статический объект для этой цели. Вот выдержка из 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.
(Тем не менее, я боюсь, что вы не можете скомпилировать Asio
под виндой с /Za
, но вам также не нужно делать это, чтобы сделать ваш код переносимым на Linux.)