Передача ссылки на буфер между приложениями Windows

#c# #c #wpf

#c# #c #wpf

Вопрос:

У меня есть данные, находящиеся в буфере, выделенном в приложении A с использованием AllocHGlobal. Я хочу использовать этот буфер в приложении B, т.е. передавать ссылку между двумя приложениями Windows 7 или между приложением и службой.

Можно ли это сделать без копирования буфера один или несколько раз?

Спасибо.

Комментарии:

1. Обычно вы используете класс stream для подключения разных приложений. Одним из способов достижения этой цели является использование стандартного ввода и стандартного вывода.

2. Что-то вроде этого? . Вы спрашиваете, как реализовать выбранное вами решение для неустановленной проблемы; если вы разделяете реальную цель, может быть лучший ответ.

3. Память защищена, поэтому другое приложение не может использовать память, выделенную приложением.

4. @jdweng спасибо, но для этого потребовалась бы фактическая копия данных через поток, не так ли?

5. @ed извините, если я не был ясен, но я думал, что передача ссылки на другой процесс была ясна. Я стараюсь задавать вопросы коротко и по существу. Однако, допустим, у меня есть буфер размером 10 МБ, выделенный с помощью AllocHGlobal в процессе A. Я хочу получить доступ к этому буферу в процессе B, но я не хочу копировать этот буфер, я просто хочу получить ссылку на этот буфер.

Ответ №1:

Хотя вы не можете напрямую совместно использовать память из своего пространства процессов, вы могли бы достичь чего-то подобного с помощью файлов, отображаемых в непостоянной памяти

Комментарии:

1. Спасибо, я ценю ваш ответ, который подтверждает мои подозрения. Данные действительно передаются в одну сторону, и использование MMF в качестве буферов данных в приложении A непрактично для работы, которую оно должно выполнять. Таким образом, одна копия в MMF должна быть допущена. Я подозреваю, что это быстрее, чем сериализация или передача данных по каналу или потоку. Вероятно, стоит поэкспериментировать с этим.