好吧,我真的无法弄清楚这一点。
我在 MSVC 中有一个 DLL 项目,它试图使用 Asio(来自 Boost 1.45.0),但是每当我创建 io_service 时,都会引发异常。这是我为测试目的所做的事情:
void run()
{
boost::this_thread::sleep(boost::posix_time::seconds(5));
try
{
boost::asio::io_service io_service;
}
catch (std::exception & e)
{
MessageBox(NULL, e.what(), "Exception", MB_OK);
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
boost::thread thread(run);
}
return TRUE;
}
这是消息框显示的内容:
winsock:WSAStartup 此时无法运行,因为它用来提供网络服务的底层系统当前不可用
这是 MSDN 所说的(错误代码 10091,WSASYSNOTREADY):
网络子系统不可用。如果 Windows Sockets 实现由于其用于提供网络服务的底层系统当前不可用而无法运行,则 WSAStartup 将返回此错误。用户应检查: 适当的 Windows Sockets DLL 文件是否在当前路径中。他们没有尝试同时使用多个 Windows Sockets 实现。如果您的系统上有多个 Winsock DLL,请确保路径中的第一个适用于当前加载的网络子系统。Windows Sockets 实现文档,以确保当前已正确安装和配置所有必要的组件。
然而,这些似乎都不适用于我(或者我认为)。
这是我的命令行:
/O2 /GL /D "_WIN32_WINNT=0x0501" /D "_WINDLL" /FD /EHsc /MD /Gy /Fo"Release\" /Fd"Release\vc90.pdb" /W3 /WX /nologo /c /TP /错误报告:提示
如果有人知道可能出了什么问题,请帮助我!谢谢。