как заменить WSAStartup (MAKEWORD (2, 2) и данные); с наддувом: asio?

У меня есть родной проект DLL, который я использую из C # через оболочку CLI. В Initialize метод длл я звоню

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

Это отлично работает.
Теперь я решил переместить всю dll в boost :: asio (потому что я перенесу ее на Linux и хочу включить опцию компилятора / Za).

Вопрос — где и как заменить WSAStartup вызов?

  • переместить его в оболочку CLI или в проект C # верхнего уровня?
  • замените его некоторым вызовом boost :: asio (какой метод вызывать?)

2

Решение

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.)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]