CAsyncSocket :: OnReceive не вызывается в DLL

У меня есть программа 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 является
никогда не звонил.

Кроме того, если я вызываю CAsyncSocke :: Recieve без ожидания OnRecieve, я получаю ошибку WSAEWOULDBLOCK.

Когда я тестирую модуль на своем ПК, все работает нормально. Когда я пытаюсь на клиентском компьютере, у меня есть вышеупомянутая проблема. Все команды connect и send работают нормально, и мне сообщили, что оборудование отправляет ответ, но событие OnRecieve отсутствует.

0

Решение

Кажется, есть проблема с отправкой сообщения OnRecieve в DLL.

Несмотря на то, что сообщение OnRecieve не отправляется, любой ответ должен быть доступен для чтения получателем.

Таким образом, кажется, что для обходного пути при использовании CAsyncSocket в DLL нельзя использовать CAsyncSocket :: OnRecieve, а использовать только CAsyncSocket :: Receive. Возможно, привязан к таймеру.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector