MFC CSocket在静态库中

时间:2008-11-20 19:06:14

标签: c++ mfc

我正在使用MFC类CSocket。没有什么复杂的 - 打开与服务器的连接并发送短消息。当我在DLL中与MFC链接时,代码工作正常。但是,当我在静态库中链接到MFC时,对CSocket::Create()的调用崩溃。

我想在静态库中使用MFC,因为它简化了分发。

2 个答案:

答案 0 :(得分:1)

根据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
   }

答案 1 :(得分:0)

您是否收到任何链接器警告?确保根据“代码生成”设置链接正确的CRT库。对于多线程静态,您需要libcmt.lib用于发布(libcmtd.lib用于调试),还要确保未定义_AFXDLL。