Здравствуйте, 3V, Вы писали:
3V> Я пытаюсь осуществить передачу данных между процессами с помощъю 3V>Anonymous Pipe (поскольку требуется, чтобы программа работала во всех виндах). Причем процесс — клиент не должен являться дочерним процессом сервера. Для передаче хендла для записи информации, полученного при вызове CreatePipe в процессы — клиенты я использую общую (shared) секцию памяти в dll, загружаемой и сервером и клиентами. 3V>В нынешнем состоянии значение этого хендла совпадает на стороне сервера и клиента. 3V>При всем при этом чтение на стороне сервера проходит успешно (поток виснет на ReadFile), а вот вызов WriteFile на стороне клиента заканчивается неудачей. 3V>Значение GetLastError = 6 (ERROR_INVALID_HANDLE). Я пробовал менять мозги сервера и клиента местами (сервер пишет, клиент читает). В этом случае запись (опять же на стороне сервера, где Pipe и создавался) проходит успешно, а вот клиент читать не может. И та же GetLastError = 6. В MSDN утверждается, что передачу хендла в другой процесс через общую память в данном случае использовать можно. Но все примеры MSDN основаны на передаче хендла от родительского процесса дочернему. 3V> Не подскажет ли кто возможные пути решения проблемы ?
3V> Заранее благодарен. С уважением, Vic.
Анонимные пайпы будут работать только с дочерними процессами. Нельзя передавать HANDLE из одного поцесса в
другой, т.к. он существует только в контексте процесса, который его создал. Исключением является наследование
HENDLE дочерним процессом.
Так что в данной задаче надо искать другой способ IPC (например через dll с shared секцией).