2

我有本机 dll 项目,我通过 CLI 包装器从 C# 使用它。在Initialize我正在调用的 dll 方法中

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

这工作正常。现在我决定将整个 dll 移动到 boost::asio(因为我会将它移植到 Linux 并且我想启用 /Za 编译器选项)。

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

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

1 回答 1

2

Boost.AsioWinsock之前初始化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在 Windows 下用编译/Za,但你也不必为了让你的代码移植到 Linux 上而这样做。)

于 2013-04-28T08:30:38.793 回答