Здравствуйте volk, вы писали:
V> Имеется следующая задачка. Запускается до дюжины консольных приложений. Они должны обмениваться между собой данными, но не абы как, а по следующим правилам: V> отправляющий процесс вызывает некую процедуру Send, передает ей указатель на массив данных, размер массива и ID процесса-получателя; V> принимающий процесс вызывает процедуру Recv, передает ей указатель на буфер, в котором будут сохраняться данные, их размер и ID процесса-отправителя V> Сложность состоит в том, что процедура Send не должна дожидаться, пока данные отправятся и будут приняты, а возвращать управление сразу. Так же и Recv только добавляет запрос на получение данных, но не дожидается, пока буфер приема будет заполнен. Кроме того, вовсе не обязательно, что сначала будет вызван Send, а потом Recv. Порядок вызова этих процедур может быть совершенно произвольным.
V> Буду очень благодарен, если кто-нибудь подскажет, при помощи каких механизмов Windows 95/98 можно организовать такое взаимодействие.
Я так понимаю, сам механизм обмена данными основан на принципе "поточноти" (streaming).
Самый простой на мой взгляд способ -- это механизм сокетов. Работает просто и со вкусом, а если пользовать Windows Sockets 2, то ещё и асинхронно.
Т.е. идея состоит в том, чтобы написать ма-а-асенький сервак (a-la echo service). Send & Recv уже есть...
Можно спокойно использовать WM_COPYDATA вкупе с DDE, только юзать не SendMessage, а PostMessage
А вот при использоваении shared-memory или FileMapping, можно поиметь кучу геморроя...
Да, кстати, всегда остается возможность попользовать ReadProcessMemory() && WriteProcessMemory(), но у меня складывается впечатление, то применение данных фишек будет просто нерименимо.