Shared Memory
От: kisatomsk  
Дата: 08.03.06 15:11
Оценка:
Друзья нужна помощь, точнее подсказка коротенькая.
Дело в том, что я тут в MSDN наткнулся на древние артифакты посвященные организации памяти в Win NT based OS, так вот после этого чтива я понял что в принципе реально расположить программный объект в общедоступной памяти процесса, а потом получить к нему доступ из другого процесса(при наличии прав конечно). Но вот маленькая фигня, после еще n часов чтива я стал понимать, что тут все m сложнее...а именно Я так и не понял нужно ли для обеспечения общего доступа других процессов распологать объект за 2Гб пределом Виртуального пространства процесса, или хватит разрешений на доступ и чтение, а так же если я получил Указатель на процесс с общедоступным объектом, то каким образом я могу получить доступ к этому общедоступному объекту и выполнить его методы.

Пожалуйсто наставьте на путь истинный
Re: Shared Memory
От: wellwell Австралия https://www.softperfect.com
Дата: 08.03.06 15:30
Оценка:
"kisatomsk" <50327@users.rsdn.ru> wrote in message news:1759864@news.rsdn.ru...
> Пожалуйсто наставьте на путь истинный

Так для этого обычно MMF используются, создаете memory mapped file в свопе,и используйете из двух приложений.
Posted via RSDN NNTP Server 2.0
Re[2]: Shared Memory
От: kisatomsk  
Дата: 08.03.06 15:43
Оценка:
Здравствуйте, 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. Но тут очень много ограничений — компиляторы и настройки должны совпадать,
проблемы с виртуальностью (используются адреса функций, которые могут быть отличны в разных процесссах), проблемы с кучами — разные, проблемы с указателями и пр. Оно вам надо?
Re: Shared Memory
От: rg45 СССР  
Дата: 09.03.06 14:17
Оценка:
"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
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Shared Memory
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 09.03.06 14:47
Оценка:
Hello kisatomsk, you wrote:

> Да да это действительно легкий путь, но есть куча НО. Этот путь не катит хотябы по тому что я имел ввиду не размещение ресурса данных в общедоступной памяти, а программного объекта типа класс или структура, к которому можно было бы получать доступ из разных процессов и выполнять его методы.


Про классы лучше забудьте. Вам тогда нужно смотреть в сторону COM.

--
Всего хорошего, Слава
ICQ: 197577902
Posted via RSDN NNTP Server 2.0
Re[3]: Shared Memory
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 09.03.06 14:48
Оценка:
Hello kisatomsk, you wrote:

> Да да это действительно легкий путь, но есть куча НО. Этот путь не катит хотябы по тому что я имел ввиду не размещение ресурса данных в общедоступной памяти, а программного объекта типа класс или структура, к которому можно было бы получать доступ из разных процессов и выполнять его методы.


Про классы лучше забудьте. Вам тогда нужно смотреть в сторону COM.

--
Всего хорошего, Слава
ICQ: 197577902
Posted via RSDN NNTP Server 2.0
Re[2]: Shared Memory
От: kisatomsk  
Дата: 09.03.06 17:22
Оценка: :)
Здравствуйте, rg45, Вы писали:


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.
Re[3]: Shared Memory
От: rg45 СССР  
Дата: 09.03.06 17:47
Оценка:
> Здравствуйте, kisatomsk, Вы писали:
> И еще раз на последок спасибо огромное, не не огромное, а ОГРОМНЕЙШЕЕ тебе rg45.

Ну желаю удачи тебе.
Может расскажешь потом, что получилось из этого.
Posted via RSDN NNTP Server 2.0
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: Shared Memory
От: Кодёнок  
Дата: 10.03.06 07:41
Оценка:
Здравствуйте, rg45, Вы писали:

>> И еще раз на последок спасибо огромное, не не огромное, а ОГРОМНЕЙШЕЕ тебе rg45.


R>Ну желаю удачи тебе.

R>Может расскажешь потом, что получилось из этого.

Жаль вас разочаровывать парни, но не всё так просто. В shared-сегменте нельзя расположить С++-объекты — имеющие конструкторы, виртуальные функци и т.д. Причины вам тут уже написали. Перечитайте Можно только простенькие переменные и массивы таких переменных. И то, например, настройки выравнивания для структур при компиляции должны совпадать.

Вам дорога в COM. Или в дотнет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.