2008-11-20 76 views
1

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

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

回答

0

这响起一个朦胧而遥远的钟声 - 你使用的是什么版本的MFC?

0

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

+0

没有链接器警告。 – ravenspoint 2008-11-20 19:45:58

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 
    } 
+0

你为什么讨论线程?据我所知(这是4年前!)该程序是单线程的。当然,我没有提到线程在我的问题。无论如何,我不再使用MFC - 还有人吗? – ravenspoint 2013-01-11 13:28:07