![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Здравствуйте!
Мне требуется реализовать обмен текстовыми сообщениями между несколькими процессами. Обеспечить возможность отправки сообщения сразу нескольким адресатам. Реализовать подтверждение приёма сообщения адресатом или, в случае потери сообщения, повторную его передачу. Взаимодействие выполнить с помощью страничного файла. Возник ряд вопросов.. Пожалуйста, помогите разобраться! Сначала хочу получить список активных процессов, вывести, скажем, на ListBox и выбрать процессы, которые будут приёмниками текстовых сообщений (а как можно в ListBox осуществить множестсвенный выбор? если вообще можно). Далее можно из моего приложения открыть файл. Теперь в процессе-передатчике создаём в памяти проекцию открытого дискового файла и отображаем её на адресное пространство процесса-отправителя с помощью CreateFileMapping(), где будем использовать дескриптор открытого файла... Процессы же приёмники (выбранные в ListBox) по нажатию кнопки должны отобразить проекцию страничного файла на своё адресное пространство и прочитать данные, которые подлежат передаче...а как это осуществить? мне на понятно...И как это осуществить с учётом того, что получателей должно быть несколько?? И как я понимаю, процесс-приёмник не должен начинать читать из памяти данные раньше, чем их туда запишет отправитель...А как это должно выглядеть? (использовать объекты синхронизации?) И последнее...В каком виде можно организовать подтверждение приёма сообщений, при чём чтоб было понятно, от какого процесса-приёмника пришло это подтверждение?? |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Тебе сначала сюда: ближе к концу страницы есть тема "Совместный доступ процессов к данным через механизм проецирования"...
|
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
По ссылке из предыдущего поста имеется программа-пример MMFShare...На основе её решила выполнять своё задание...
Кое-что не понятно: По нажатию кнопки у меня происходит следующее:
Знаком "?" отмечено неясное...Что это за операция? Как её заменить с учётом того, что у меня на форме есть Edit, куда вводится сообщение для передачи..? Сообщение отредактировано: 18192123 - 28.11.2008 10:35 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Что это за операция? Это макрос: MSDN -> Edit_GetText MacroЦитата Как её заменить с учётом того, что у меня на форме есть Edit, куда вводится сообщение для передачи..? Не надо ничего менять, макрос сам развернется в вызов GetWindowText... |
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
при компиляции возникла вот такая ошибка:
1>d:\program files\microsoft sdks\windows\v6.0a\include\shtypes.h(51) : error C2144: syntax error : 'int' should be preceded by ';' что это означает?? и откуда shtypes.h? я даже не использую этот заголовочный файл.. |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Без понятия... Я открыл CPP-файл в Builder-е, он прекрасно все скомпилировал. Что-то опять у VC не то в библиотеках. Попробуй не открывать тот проект, а создать новый, и добавить в него только CPP-файл.
Цитата я даже не использую этот заголовочный файл.. То, что ты его не подключаешь явно - не значит "не используешь", он может подключаться другими header-файлами. Кстати, встречались жалобы, что совместное использование shtypes.h и shlobj.h приводит к конфликту. Возможно, конфликт проявляется не только с shlobj.h, но и с другими файлами заголовков...Кстати, у тебя же Unicode-проект подразумевается? Тогда посмотри в файл CmnHdr.h, там есть указание: #ifndef _M_IX86Ты раскомментировала эту строку? |
18192123 |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Попробуй не открывать тот проект, а создать новый, и добавить в него только CPP-файл. У меня уже в новом проекте.. Кстати, насчёт 1>d:\program files\microsoft sdks\windows\v6.0a\include\shtypes.h(51) : error C2144: syntax error : 'int' should be preceded by ';'... Компилятор при обнаружении ошибки указывает на строки из shtypes.h вот такого содержания:
Кстати, у тебя же Unicode-проект подразумевается? Тогда посмотри в файл CmnHdr.h, там есть указание: У меня вообще нет такого файла...Поиск не дал результатов.. |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата У меня вообще нет такого файла В таком случае, как ты компилируешь проект MMFShare? Он требует подключения файла CmnHdr.h... А если ты просто надергала куски из MMFShare и вставила в свою программу, то я ничем тебе помочь не могу, я не телепат. Приаттачивай свой CPP полностью. |
18192123 |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
... А если ты просто надергала куски из MMFShare и вставила в свою программу.... так оно и есть.... Сообщение отредактировано: 18192123 - 28.11.2008 13:49 Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Все прекрасно компилируется и GCC и Builder-ом 2009, если после подключения Windows.h подключить еще и WindowsX.h (ну, и естественно, добавить недостающие прототипы, которые у тебя в main.h). Выходит, что-то у тебя в настройках самого проекта напортачено.
|
18192123 |
![]()
Сообщение
#11
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Добавила действия по нахождению объекта «проекция файла" с именем MMFSharedData...
Предполагается, что программа спроецирует представление объекта на адресное пространство своего процесса и скопирует данные из проецируемого файла в Edit... Но у меня что-то не так работает, потому что передача сообщения не происходит... Объясните пожалуйста,в чём причина?
Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
void OnCommand (HWND hwnd, int id, HWND hw, UINT){ ![]() А почему и по hButCreateMap и по hButOpenMap вызывается процедуры создания файла? Во втором случае должно выполняться нечто другое по-моему... |
18192123 |
![]()
Сообщение
#13
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
void OnCommand (HWND hwnd, int id, HWND hw, UINT){ ![]() А почему и по hButCreateMap и по hButOpenMap вызывается процедуры создания файла? Во втором случае должно выполняться нечто другое по-моему... Оййй...Не изменила название процедуры....Какая же глупая ошибка...!!! Спасибо, что указали на неё!!! |
18192123 |
![]()
Сообщение
#14
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Теперь насчёт повторной отправки сообщения..в случае неудачного исхода...
Объясните пожалуйста, как это организовать? Повторять действия, предусмотренные в случае нажатия на кнопку ButCreateMap? И в какой момент нужно об этом позаботиться? Сообщение отредактировано: 18192123 - 30.11.2008 2:10 |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Цитата Теперь насчёт повторной отправки сообщения..в случае неудачного исхода... А что, если в первый раз отсылка была неудачной, то повторная посылка окажется успешной? Ну, вызовешь ты еще раз OnClickButCreateMap, и что? Если у тебя (к примеру) не было прав доступа в папку, так их и не будет. Если не было места на диске, оно из ниоткуда не появится.Надо смотреть, в чем причина отказа в посылке сообщения, и убирать причину, а не просто повторять попытку, которая обречена на провал. GetLastError после возврата признака неудачного выполнения какой-то функции, и принятие мер по решению проблемы, указанной в коде ошибки - единственное, что могу предложить... |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 19:15 |