Member 12711426 Ответов: 3

Как решить проблему сбоя диалогового окна?


У Меня Есть Клиент Серверные Приложения,
и я создал диалоговый класс и реализовал одну кнопку
и я реализовал свой клиентский класс В диалоговом классе,
когда я нажимаю кнопку клиент должен соединиться с сервером и
серверное приложение начинает читать сообщения от клиента,

Он подключается и во время чтения данных из клиентского приложения происходит сбой,
Может ли кто-нибудь объяснить мне, как решить эту проблему?

Спасибо

Что я уже пробовал:

Мое клиентское приложение :-
#include"stdafx.h"
#include "Client.h"

LPDWORD dwBytes;

HANDLE m_hPipe;

Client::Client(void)
{
	
}
void Client::CreateFile()
{
	m_hPipe = ::CreateFile(L"\\\\.\\pipe\\mypipe",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
	if(m_hPipe==INVALID_HANDLE_VALUE)
	{
		cout<<"File Creation Failed:";
	}
	else
	{
		cout<<"File Created Sucessfully:\n";
		cout<<"Sending Message to the Server:\n";
		::ConnectNamedPipe(m_hPipe,NULL);
	}
}
BOOL Client::WriteFile()
{
	//m_buffer[50] = reinterpret_cast<unsigned char="">("Welcome to server...........!");
	m_buffer = L"Welcome...!";
	LPDWORD dwBytes = 0;
	bool Result = ::WriteFile(m_hPipe,&m_buffer,sizeof(m_buffer),dwBytes,0);
	if(FALSE == Result)
	{
		cout<<"Write file failed:\n";
	}
	else
	{
		cout<<"Message wrote to the Server:\n";
	}
	return true;
}
Client::~Client(void)
{
}
И я реализовал этот класс В диалоговом классе, как
void CSampleApplicationDlg::OnBnClickedButton1()
{
	Obj->CreateFile();
	Obj->WriteFile();
	Sleep(10000);
	// TODO: Add your control notification handler code here
}

3 Ответов

Рейтинг:
2

KarstenK

Код в функции theOnBnClickedButton1() должен выполняться в отдельном потоке.

Совет: когда закончите использовать PostThreadMessage, как в этой статье PostThreadMessage Демистифицировал объяснено, чтобы проинформировать ваш диалог.


Рейтинг:
0

Richard MacCutchan

Я думаю, что это почти то же самое, что и ваша предыдущая проблема с инициализацией символьных массивов. Вы еще не показали нам определение понятия m_buffer, но если это так

wchar_t m_buffer[50]
m_buffer = L"Welcome...!";

тогда у вас возникнут проблемы. Вы пытаетесь выделить символьный указатель на массив символов, который просто не будет работать, как описано в разделе Ошибка C2440: '=' : не удается преобразовать из 'wchar_t *' в 'unsigned char *'[^].

Вам нужно вернуться к ссылке на C/C++ и изучить разницу между массивами и указателями, а также как их инициализировать, чтобы избежать подобных проблем.


Рейтинг:
0

OriginalGriff

Начните с использования отладчика (на обоих компьютерах), чтобы узнать, где он падает и что происходит, когда он это делает - обычно есть исключение или сообщение об ошибке / номер, который может дать вам ценные подсказки.

Мы ничего не можем для вас сделать: у нас нет доступа ни к машинам yoru, ни к коду сервера вообще!