DLL

时间:2017-11-15 16:49:31

标签: c++ sockets dll mfc casyncsocket

我有一个Qt程序需要使用VC ++ CAsyncSocket进行TCP连接。我创建了一个DLL。包装CAsyncSocket。

class CClientSocket ;
class __declspec(dllexport) CClientSocketEx
{
public:
    CClientSocketEx();
     ~CClientSocketEx();

     void Close();
     bool Create();
     bool Connect(const char* lpszHostAddress, unsigned int nHostPort); 
     int Send(const char* lpBuf, int nBufLen, int nFlags = 0);
     bool GetPeerName(char* rPeerAddress, int length, unsigned int& rPeerPort);
     int Receive(void* lpBuf, int nBufLen, int nFlags = 0);
private:
    CClientSocket* clientSocket;
};

class CClientSocket : public CAsyncSocket
{
   virtual void OnReceive(int nErrorCode);
};

void CClientSocket::OnReceive(int nErrorCode)
{
    if (!AfxSocketInit())
    {
        AfxMessageBox(_T("Failed to Initialize Sockets"), MB_OK | MB_ICONSTOP);
    }
    CString mesage(_T("CClientSocket::OnReceive nErrorCode: %d"), nErrorCode);
    logMessage(mesage);
    CAsyncSocket::OnReceive(nErrorCode);
}

我遇到的问题是CAsyncSocket :: OnRecieve是 从未打过电话。

此外,如果我在没有等待OnRecieve的情况下调用CAsyncSocke :: Recieve,我会收到WSAEWOULDBLOCK错误。

当我在自己的电脑上进行单元测试时,一切正常。当我尝试客户端机器时,我遇到了上述问题。 connect和send命令都运行正常,我被告知硬件正在发送回复,但没有OnRecieve事件。

1 个答案:

答案 0 :(得分:0)

在DLL中发送OnRecieve消息似乎有问题。

尽管没有发送OnRecieve消息,但仍然可以通过Recieve读取任何响应。

因此,如果在DLL中使用CAsyncSocket,则解决方法似乎是不使用CAsyncSocket :: OnRecieve但仅使用CAsyncSocket :: Receive。也许附在计时器上。