Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2009, 23:52   #1
Alex07
Новичок
Джуниор
 
Регистрация: 24.09.2009
Сообщений: 2
По умолчанию Работа с Mailslot'ами

Всем привет, в общем, у меня проблема с почтовыми ящиками. От клиента к серверу передается сообщение.

Код сервера:

#include <windows.h>
#include <string>

#define IDM_CREATE 101
#define IDM_CLOSE 102
#define MAX_LOADSTRING 100

HINSTANCE hInst;
TCHAR szTitle[MAX_LOADSTRING];
TCHAR szWindowClass[MAX_LOADSTRING];

BOOL fReturnCode; //Код, для возврата из функции
DWORD cbMessages; //Размер сообщения в байтах
DWORD cbMsgNumber; //Количество сообщений в канале
HANDLE hMailslot; //Идентификатор канала MailSlot
LPSTR lpszMailslotName = "\\\\.\\mailslot\\$Channel$"; //Имя создаваемого канала MailSlot
char szBuf[512]; //Буфер для передачи данных
DWORD cbRead; //Количество байт данных, принятых через канал
HWND LsBx,But,But2;

LRESULT CALLBACK WndProc(HWND,UINT,UINT,LONG);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = "Server";
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = szClassName;

if(!RegisterClass(&WndClass))
{
MessageBox(NULL,"Не могу создать класс","Ошибка!",MB_OK);
}
hWnd = CreateWindow(szClassName,"Сервер",W S_OVERLAPPEDWINDOW,200,100,400,300, NULL,NULL,hInstance,NULL);
if(!hWnd)
{
MessageBox(NULL,"Не могу создать окно","Ошибка",MB_OK);
}
LsBx = CreateWindow("ListBox", NULL, WS_VISIBLE|WS_CHILD|WS_BORDER|LBS_S TANDARD|LBS_WANTKEYBOARDINPUT,
10, 50, 100, 100, hWnd, NULL, hInstance, NULL);
But = CreateWindow("button", "Создать канал", WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
35, 230, 155, 30, hWnd, (HMENU)IDM_CREATE, hInstance, NULL);

But2 = CreateWindow("button", "Закрыть канал", WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
190, 230, 155, 30, hWnd, (HMENU)IDM_CLOSE, hInstance, NULL);
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);

while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam)
{
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT rect;
SetRect(&rect, 10, 0, 200, 30);
int wmID, wmEvent;


switch(uMsg)
{
case WM_COMMAND:
wmID=LOWORD(wParam);
wmEvent=HIWORD(wParam);
switch(wmID)
{
case IDM_CREATE:
//MessageBox(hWnd,"In rect","",MB_OK);
hMailslot = CreateMailslot(lpszMailslotName, NULL, MAILSLOT_WAIT_FOREVER, NULL);
//MessageBox(hWnd,"Success","",MB_OK) ;
SendMessage(LsBx,LB_ADDSTRING,0,(LP ARAM)"Канал создан!");
if(hMailslot == INVALID_HANDLE_VALUE)
{
MessageBox(hWnd, "Канал уже создан, либо невозможно совершить операцию!", "Внимание!", MB_OK);
return 0;
}
if (hMailslot == INVALID_HANDLE_VALUE) return 0;
else return 1;
if(1)
{
fReturnCode = GetMailslotInfo(hMailslot, NULL, NULL,&cbMsgNumber, NULL);
if(!fReturnCode)
{
MessageBox(hWnd,"Ошибка. Сообщений нет","Внимание!",MB_OK);
break;
}
if(cbMsgNumber != 0)
{
if (ReadFile(hMailslot, szBuf, 512, &cbRead, NULL))
{
SendMessage(LsBx, LB_ADDSTRING, (WPARAM)+1,(LPARAM)szBuf);
UpdateWindow(LsBx);
}
else
{
MessageBox(hWnd, "Ошибка. Сообщений нет","Внимание!",MB_OK);
break;
}

}


}

break;
case IDM_CLOSE:
CloseHandle(hMailslot);
SendMessage(LsBx,LB_ADDSTRING,NULL, (LPARAM)(LPTSTR)"Работа завершена");
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

case WM_PAINT:
hDC = BeginPaint(hWnd,&PaintStruct);
GetClientRect(hWnd,&rect);
EndPaint(hWnd,&PaintStruct);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lPar am);
}
<a href="http://vkontakte.ru/id4944002">Я в контакте</a>
Alex07 вне форума Ответить с цитированием
Старый 10.11.2009, 23:52   #2
Alex07
Новичок
Джуниор
 
Регистрация: 24.09.2009
Сообщений: 2
По умолчанию

Код клиента

#include <windows.h>
#include <string>
#include <stdio.h>
#define IDM_OPEN 101
#define IDM_CLOSE 102

LRESULT CALLBACK WndProc(HWND,UINT,UINT,LONG);

HWND edit,But1,But2,But3,LsBx;
HANDLE hMailslot; // Идентификатор канала Mailslot
char szMailslotName[256]; // Буфер для имени канала Mailslot
DWORD cbWritten; // Количество байт, переданных через канал
char szBuf[512];

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = "Client";
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = szClassName;

if(!RegisterClass(&WndClass))
{
MessageBox(NULL,"Не могу создать класс","Ошибка!",MB_OK);
}
hWnd = CreateWindow(szClassName,"Клиент",W S_OVERLAPPEDWINDOW,200,100,400,300, NULL,NULL,hInstance,NULL);
if(!hWnd)
{
MessageBox(NULL,"Не могу создать окно","Ошибка",MB_OK);
}

edit = CreateWindow("Edit", NULL, WS_VISIBLE|WS_CHILD|WS_BORDER|ES_AU TOHSCROLL|ES_AUTOVSCROLL|ES_MULTILI NE,
10, 20, 150, 20, hWnd, NULL, hInstance, NULL);
But1 = CreateWindow(TEXT("button"), TEXT("Открыть файл"), WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
35, 230, 155, 30, hWnd, (HMENU)IDM_OPEN, hInstance, NULL);
But2 = CreateWindow(TEXT("button"), TEXT("Закрыть канал"), WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
190, 230, 155, 30, hWnd, (HMENU)IDM_CLOSE, hInstance, NULL);
LsBx = CreateWindow("ListBox", NULL, WS_VISIBLE|WS_CHILD|WS_BORDER|LBS_S TANDARD|LBS_WANTKEYBOARDINPUT,
10, 50, 100, 100, hWnd, NULL, hInstance, NULL);
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);

while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam)
{
//char text[100];
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT rect,r;
int xPos,yPos;
SetRect(&rect, 10, 0, 200, 30);
SetRect(&r,250,50,300,100);
int wmID, wmEvent;
switch(uMsg)
{
case WM_MOUSEMOVE:
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);
InvalidateRect(hWnd, &rect, TRUE);
break;


break;
case WM_COMMAND:
wmID=LOWORD(wParam);
wmEvent=HIWORD(wParam);
switch (wmID)
{
case IDM_OPEN:
{
strcpy(szMailslotName, "\\\\.\\mailslot\\$Channel$");
hMailslot = CreateFile(szMailslotName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
SendMessage(LsBx,LB_ADDSTRING,0,(LP ARAM)"Файл открыт!");
if(hMailslot == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Ошибка","Канал не создан",MB_OK);
return 0;
}
break;
}
case IDM_CLOSE:
CloseHandle(hMailslot);
SendMessage(LsBx,LB_ADDSTRING,0,(LP ARAM)"Канал закрыт!");
return 0;
break;
}
break;
case WM_LBUTTONDOWN:
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);
if ((xPos > 250 && xPos < 300 ) && ( yPos > 50 && yPos < 100))
{
if(hMailslot == INVALID_HANDLE_VALUE) return 0;
else return 1;
if(1)
{
SendMessage(edit, EM_GETLINE, (WPARAM)0, (LPARAM)(LPCSTR)szBuf);
if (!WriteFile(hMailslot, szBuf, strlen(szBuf) + 1,&cbWritten, NULL)) break;
if(!strcmp(szBuf, "exit")) break;
}
}
case WM_PAINT:
hDC = BeginPaint(hWnd,&PaintStruct);
GetClientRect(hWnd,&rect);
TextOut(hDC,10,5,"Введите текст",13);
// sprintf(text, "xPos = %d, yPos = %d\0", xPos, yPos);
// DrawText(hDC, text, -1, &rect, DT_LEFT);
FillRect(hDC,&r,(HBRUSH)CreateSolid Brush(RGB(255,0,0)));
EndPaint(hWnd,&PaintStruct);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lPar am);
}


Пожалуйста, подскажите, где ошибка..
PS Подозреваю, что где-то в сервере
<a href="http://vkontakte.ru/id4944002">Я в контакте</a>
Alex07 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00