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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2018, 12:31   #1
piteriv
 
Аватар для piteriv
 
Регистрация: 16.09.2011
Сообщений: 8
По умолчанию Как передать данные через mailslot

Здравствуйте!
Пишу три программы передающие данные через mailslot на winapi.
Одна серверная программа, создающая другой процесс и mailslot и две клиентских программы отправляющие в них данные.
Серверная программа - это обычное оконное приложение. Она состоит из главной функции WinMain, регистрирующая класс окна, создающая окно приложения и оконной функции которая обрабатывает приходящие сообщения.
Клиентские программы состоят только из главной функции WinMain и выводят данные в обычный MessageBox.
Привожу пример обработки только оконной функции так как главная тривиальна.
Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rt;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    HANDLE hMs;
    DWORD ns, mc, nbr;
    static char srv[] = {""};
    static char buffer[400];
    switch(Msg)
    {
    case WM_CREATE:
        GetClientRect(hWnd, &rt);
        CreateWindow("button","Ïðîöåññ 1",WS_CHILD|WS_VISIBLE,rt.right/8,(rt.bottom/4)*3,100,25,hWnd,(HMENU)1,hInst,NULL);
        CreateWindow("button","Ïðîöåññ 2",WS_CHILD|WS_VISIBLE,(rt.right/8)*6,(rt.bottom/4)*3,100,25,hWnd,(HMENU)2,hInst,NULL);
        break;
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case 1:
            strcat(srv, "d:\\cpp\\visualc\\api_mtuci\\srv1\\Debug\\srv1.exe");
            break;
        case 2:
            strcat(srv, "d:\\cpp\\visualc\\api_mtuci\\srv2\\Debug\\srv2.exe");
            break;
        }
        hMs = CreateMailslot("\\\\.\\mailslot\\mtuci", 0, MAILSLOT_WAIT_FOREVER, NULL);
        ZeroMemory(&si, sizeof(si));
        CreateProcess(srv, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
        GetMailslotInfo(hMs, NULL, &ns, &mc, NULL);
        if(mc != 0)
        {
            ReadFile(hMs, buffer, 400, &nbr, NULL);
        }
        CloseHandle(hMs);
        InvalidateRect(hWnd, NULL, TRUE);
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        TextOut(hdc,0,0,buffer,strlen(buffer));
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, Msg, wParam, lParam);
    }
    return 0;
}
При нажатии на одну из кнопок в окне вызывается процесс, но не передаются данные в окно серверного приложения. А при повторном нажатии на кнопку процесс не вызывается.
Помогите пожалуйста, очень нужно.

Прошу прощения что не в той теме разместил.
Просто Питер.

Последний раз редактировалось piteriv; 10.03.2018 в 12:41. Причина: сообщение не по теме размещения
piteriv вне форума Ответить с цитированием
Старый 10.03.2018, 13:28   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Как вы думаете какого размера srv?
2. Как вы думаете куда запишутся ваши сроки функцией strcat?
p51x вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать данные через сокеты и изимерить скорость vadimck Работа с сетью в Delphi 1 24.06.2016 06:18
Как передать данные в поток.. login10 C# (си шарп) 9 01.11.2014 15:08
Как передать данные из WebBrowser'a ? Santa86 C# (си шарп) 0 15.10.2014 17:42
Как передать данные из БД в ComBox uni Microsoft Office Excel 8 22.07.2011 08:20
Как Передать данные из формы в отчет? ZiG24RUS Microsoft Office Access 1 29.05.2009 23:31