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