Как заменить 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.)

Другие вопросы по тегам