我有這個簡單的基於教程的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