我有这个简单的基于教程的asio代码,它在EXE中调用时工作正常,但是在使用LoadLibrary从dll内运行时崩溃。它在boost代码中崩溃而不是我的代码。 90%的时间内它会在其线程互斥功能内部崩溃。在执行dll内部的代码时,是否存在与exe相比的任何限制?C++ boost asio异步函数不会在DLL内工作
这是我的代码:
Connection::Connection(boost::asio::io_service& ioservice)
: m_Socket(ioservice)
, m_Resolver(ioservice)
{
}
void Connection::ConnectTo()
{
boost::asio::ip::tcp::resolver::query query("www.google.com", "http");
boost::asio::ip::tcp::resolver::iterator iterator = m_Resolver.resolve(query);
boost::asio::ip::tcp::endpoint endpoint = *iterator;
// crashes here inside async_connect
m_Socket.async_connect(endpoint,
boost::bind(&Connection::HandleConnect, shared_from_this(),
boost::asio::placeholders::error, ++iterator));
}
void Connection::HandleConnect(const boost::system::error_code& e,
boost::asio::ip::tcp::resolver::iterator endpoint_iterator)
{
// never reaches here
}
没有任何理由为什么这个代码会崩溃一个dll,而不是一个exe里面?请注意,这只是异步调用崩溃。同步调用做工精细
感谢
你链接静态或动态提升? – ybungalobill 2011-06-07 06:54:32
您是否在DLL中使用C++或C接口导出函数? – 2011-06-07 06:57:28
动态。谢谢 – Clive 2011-06-07 06:58:03