我使用的是MFC类CSocket。没有什么复杂的--打开到服务器的连接并发送一条短消息。当我在DLL中与MFC链接时,代码工作正常。但是,当我链接到静态库中的CSocket::Create()时,对MFC的调用会崩溃。
我想在静态库中使用MFC,因为它简化了分发。
发布于 2013-01-11 20:32:04
根据http://support.microsoft.com/kb/193101的说法
需要为每个线程创建套接字使用的句柄映射。下面的代码显示了执行此操作的函数:
void SocketThreadInit()
{
#ifndef _AFXDLL
#define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE
#define _afxSockThreadState AfxGetModuleThreadState()
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
if (pState->m_pmapSocketHandle == NULL)
pState->m_pmapSocketHandle = new CMapPtrToPtr;
if (pState->m_pmapDeadSockets == NULL)
pState->m_pmapDeadSockets = new CMapPtrToPtr;
if (pState->m_plistSocketNotifications == NULL)
pState->m_plistSocketNotifications = new CPtrList;
#endif
}发布于 2008-11-20 19:29:04
你有收到任何链接器的警告吗?确保根据您的“代码生成”设置链接正确的CRT库。对于多线程静态,您需要用于发布的libcmt.lib (用于调试的libcmtd.lib),同时确保没有定义_AFXDLL。
https://stackoverflow.com/questions/306477
复制相似问题