SH>Т.е. алгоритм чтения — прочитать свойство, получить адрес, читать память процесса, в котором она выделена. А вопрос про переносимость адреса между процессами, насколько я понимаю, заключался в следующем: правда ли, что один и тот же кусок адресного пространства процесса виден всеми снаружи по одному и тому же адресу. Я написал что правда.
Неоднократно видел упоминания, что на какой-то из систем с последним сервис паком ReadProcessMemory не работает. По крайней мере, у меня сложилось впечатление, что это _очень_ неправильное решение, и оно _ничем_ не лучше MMF.
AS>>Кстати, неплохое решение проблемы — именованый MMF.
SH>Оно не до конца асинхронное.
Ровно так же, как и ReadProcessMemory. А применительно к Com серверу — вполне асинхронное. Просто надо _уметь_
AS>>А еще лучше — ком сервер, который атоматически создается при первом обращении к соотв. функциям записи\чтения. Мы так делали, работало неплохо.
SH>Поясни, не понял.
Все просто. Создается некий ком сервер-синглтон (не inproc, естественно). Соответственно, он и занимается менеджментом очереди сообщений, которая может быть представлена как в виде MMF, так и виде любой базы данных. Реализовать ком сервер на ATL не просто, а очень просто. Для интерфеса с ним делается несколько функций (чтения сообщений и помещения сообщений в очередь), которые и создают экземпляр сервера при необходимости. Просто и эффективно.
Здравствуйте, Andrew S, Вы писали:
AS>Неоднократно видел упоминания, что на какой-то из систем с последним сервис паком ReadProcessMemory не работает. По крайней мере, у меня сложилось впечатление, что это _очень_ неправильное решение, и оно _ничем_ не лучше MMF.
Согласен. Я его и не советовал.
AS>Все просто. Создается некий ком сервер-синглтон (не inproc, естественно). Соответственно, он и занимается менеджментом очереди сообщений, которая может быть представлена как в виде MMF, так и виде любой базы данных. Реализовать ком сервер на ATL не просто, а очень просто. Для интерфеса с ним делается несколько функций (чтения сообщений и помещения сообщений в очередь), которые и создают экземпляр сервера при необходимости. Просто и эффективно.
А, ну это понятно. Прсото вынесение в отдельную службу, с использованием COM в качестве транспорта. Я думал что-то хитрое
>Неоднократно видел упоминания, что на какой-то из систем с последним сервис паком ReadProcessMemory не работает. По крайней мере, у меня сложилось впечатление, что это _очень_ неправильное решение, и оно _ничем_ не лучше MMF.
в вопросе речь (как мне кажется) шла о возможности передать данные из одного процесса в другой, причём этот второй процесс может быть запушен после завершения первого, то есть в какой-то момент времени первый уже завершился, а второй ещё не стартовал... как в таком случае использовать MMF, если с завершением процесса все хэндлы/мэппинги удаляются автоматически?
просто так передать данные между процессами, конечно, проблем не вызывает... можно даже без mmf — просто через wm_copydata послать (по условию объём данных небольшой)
<none>