Друзья нужна помощь, точнее подсказка коротенькая.
Дело в том, что я тут в MSDN наткнулся на древние артифакты посвященные организации памяти в Win NT based OS, так вот после этого чтива я понял что в принципе реально расположить программный объект в общедоступной памяти процесса, а потом получить к нему доступ из другого процесса(при наличии прав конечно). Но вот маленькая фигня, после еще n часов чтива я стал понимать, что тут все m сложнее...а именно Я так и не понял нужно ли для обеспечения общего доступа других процессов распологать объект за 2Гб пределом Виртуального пространства процесса, или хватит разрешений на доступ и чтение, а так же если я получил Указатель на процесс с общедоступным объектом, то каким образом я могу получить доступ к этому общедоступному объекту и выполнить его методы.
Здравствуйте, wellwell, Вы писали:
W>"kisatomsk" <50327@users.rsdn.ru> wrote in message news:1759864@news.rsdn.ru... >> Пожалуйсто наставьте на путь истинный
W>Так для этого обычно MMF используются, создаете memory mapped file в свопе,и используйете из двух приложений.
Да да это действительно легкий путь, но есть куча НО. Этот путь не катит хотябы по тому что я имел ввиду не размещение ресурса данных в общедоступной памяти, а программного объекта типа класс или структура, к которому можно было бы получать доступ из разных процессов и выполнять его методы.
Re[3]: Shared Memory
От:
Аноним
Дата:
09.03.06 09:00
Оценка:
Здравствуйте, kisatomsk, Вы писали:
W>>Так для этого обычно MMF используются, создаете memory mapped file в свопе,и используйете из двух приложений.
K>Да да это действительно легкий путь, но есть куча НО. Этот путь не катит хотябы по тому что я имел ввиду не размещение ресурса данных в общедоступной памяти, а программного объекта типа класс или структура, к которому можно было бы получать доступ из разных процессов и выполнять его методы.
Вам правильно сказали, единственный легальный способ — MMF + placement new. Но тут очень много ограничений — компиляторы и настройки должны совпадать,
проблемы с виртуальностью (используются адреса функций, которые могут быть отличны в разных процесссах), проблемы с кучами — разные, проблемы с указателями и пр. Оно вам надо?
"kisatomsk" <50327@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:1759864@news.rsdn.ru... > Друзья нужна помощь, точнее подсказка коротенькая. > Дело в том, что я тут в MSDN наткнулся на древние артифакты посвященные организации памяти в Win NT based OS, так вот после этого чтива я понял что в принципе реально расположить программный объект в общедоступной памяти процесса, а потом получить к нему доступ из другого процесса(при наличии прав конечно). Но вот маленькая фигня, после еще n часов чтива я стал понимать, что тут все m сложнее...а именно Я так и не понял нужно ли для обеспечения общего доступа других процессов распологать объект за 2Гб пределом Виртуального пространства процесса, или хватит разрешений на доступ и чтение, а так же если я получил Указатель на процесс с общедоступным объектом, то каким образом я могу получить доступ к этому общедоступному объекту и выполнить его методы. > > Пожалуйсто наставьте на путь истинный
Сам я этого не пробовал, но говорят, этого можно добиться с помощью #pragma section, и атрибута shared.
Posted via RSDN NNTP Server 2.0
--
Справедливость выше закона. А человечность выше справедливости.
Hello kisatomsk, you wrote:
> Да да это действительно легкий путь, но есть куча НО. Этот путь не катит хотябы по тому что я имел ввиду не размещение ресурса данных в общедоступной памяти, а программного объекта типа класс или структура, к которому можно было бы получать доступ из разных процессов и выполнять его методы.
Про классы лучше забудьте. Вам тогда нужно смотреть в сторону COM.
Hello kisatomsk, you wrote:
> Да да это действительно легкий путь, но есть куча НО. Этот путь не катит хотябы по тому что я имел ввиду не размещение ресурса данных в общедоступной памяти, а программного объекта типа класс или структура, к которому можно было бы получать доступ из разных процессов и выполнять его методы.
Про классы лучше забудьте. Вам тогда нужно смотреть в сторону COM.
R>"kisatomsk" <50327@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:1759864@news.rsdn.ru... >> Друзья нужна помощь, точнее подсказка коротенькая. >> Дело в том, что я тут в MSDN наткнулся на древние артифакты посвященные организации памяти в Win NT based OS, так вот после этого чтива я понял что в принципе реально расположить программный объект в общедоступной памяти процесса, а потом получить к нему доступ из другого процесса(при наличии прав конечно). Но вот маленькая фигня, после еще n часов чтива я стал понимать, что тут все m сложнее...а именно Я так и не понял нужно ли для обеспечения общего доступа других процессов распологать объект за 2Гб пределом Виртуального пространства процесса, или хватит разрешений на доступ и чтение, а так же если я получил Указатель на процесс с общедоступным объектом, то каким образом я могу получить доступ к этому общедоступному объекту и выполнить его методы. >> >> Пожалуйсто наставьте на путь истинный
R>Сам я этого не пробовал, но говорят, этого можно добиться с помощью #pragma section, и атрибута shared.
Спасибо огромное тебе друг , а то остальные как всегда: да это тебе не надо ... да зачем.
Тогда к ним вопрос: А зачем вы вообще програмируете и темболее еще на С++?
Я то сам на него пришел не так давно, всего то 3 месяца назад, ооо но надо сказать С++ это то что я хотел видеть в языке. Мне до этого дико не хватало его мощи в программах, правдо сейчас я еще и Ассемблер почитываю(потому что не все что я хочу можно сделать на С++). А вообще так для справки я писал до этого на Скрипт-уровневых языках(писать такие алгоритмы удобнее на интерпретируемых языках из за их гибкости и не требовательности к типизации, в этом свои плюсы и минусы), потому что пишу я в основном алгоритмы высшего порядка, это то что любят называть красивым словом Наука о ИИ. Ну и понятно как мне в этих алгоритмах не хватало "НИЗОСТИ"
И еще раз на последок спасибо огромное, не не огромное, а ОГРОМНЕЙШЕЕ тебе rg45.
Здравствуйте, rg45, Вы писали:
>> И еще раз на последок спасибо огромное, не не огромное, а ОГРОМНЕЙШЕЕ тебе rg45.
R>Ну желаю удачи тебе. R>Может расскажешь потом, что получилось из этого.
Жаль вас разочаровывать парни, но не всё так просто. В shared-сегменте нельзя расположить С++-объекты — имеющие конструкторы, виртуальные функци и т.д. Причины вам тут уже написали. Перечитайте Можно только простенькие переменные и массивы таких переменных. И то, например, настройки выравнивания для структур при компиляции должны совпадать.