Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2016, 12:59   #1
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию Может ли объект жить в памяти отдельно?

Представьте себе жизненный цикл экземпляра класса объекта:
создание (инициализация),
вызовы методов,
присваивание значений полям,
и так, пока не наступит Destroy.

Можно ли обращаться к этому экземпляру из разных других процессов?

Если поместить описание класса в dll, то эти разные процессы будут для себя создавать разные экземпляры.
Если объявить переменную типа этого класса в программе, текущие значения будут жить, пока прогу не закроют, но как извне обращаться к его методам?

Существует ли технология обособленных объектов?
Дmmm вне форума Ответить с цитированием
Старый 11.01.2016, 13:16   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

DСОМ, COM ...
come-on вне форума Ответить с цитированием
Старый 11.01.2016, 13:17   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Можно ли обращаться к этому экземпляру из разных других процессов?
Можно, если ваш объект является экземпляром COM/OLE-класса. Ярким примером будут MS Office. Можно создать свой экземпляр, а можно получить уже работающий (OLE).
API скайпа (COM), он один, а программ, обращающихся к нему через API - много.
Человек_Борща вне форума Ответить с цитированием
Старый 21.01.2016, 11:58   #4
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию

А имеется ли что-то подобное в Lazarus?
Может это TSimpleIPCServer?
Если да, то где бы инструкцию про него найти?
Дmmm вне форума Ответить с цитированием
Старый 21.01.2016, 12:40   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

IPC - способ обмена данными между процессами. Это не то что вам надо.
Цитата:
А имеется ли что-то подобное в Lazarus?
Зависит от ОС.

Только в windows можно создать некий интерфейс, зарегистрировать в системе, и только тогда его смогут использовать другие приложения.

Если не винда, то только интерфейсы в чистом виде (нет автомат. счетчика ссылок) + обращение возможно максимум из подключаемых к процессу библиотек.
Человек_Борща вне форума Ответить с цитированием
Старый 22.01.2016, 00:37   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Может ли объект жить в памяти отдельно?
В памяти реально живет только ОС (Операционная Система). В каком-то смысле "реально" живет ещё и БИОС. Всё остальное живёт виртуально, в своём собственно мирке..
northener вне форума Ответить с цитированием
Старый 22.01.2016, 06:25   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
Можно ли обращаться к этому экземпляру из разных других процессов?
Наступил год извращений. Зачем козе боян? Даешь гото обратно!
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.01.2016, 13:04   #8
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
IPC - способ обмена данными между процессами. Это не то что вам надо.
Программы, построенные на стандарте COM, фактически не являются автономными программами, а представляют собой набор взаимодействующих между собой COM-компонентов. Каждый компонент имеет уникальный идентификатор (GUID) и может одновременно использоваться многими программами. (wikipedia)

Так когда один процесс обратится к другому через СОМ-интерфейс, он разве не данные от него в итоге получит? Можно же в одном процессе вызвать функцию, которое передаст текущее значение поля объекта из другого процесса?
Дmmm вне форума Ответить с цитированием
Старый 25.01.2016, 14:03   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Так когда один процесс обратится к другому через СОМ-интерфейс, он разве не данные от него в итоге получит? Можно же в одном процессе вызвать функцию, которое передаст текущее значение поля объекта из другого процесса?
Да, COM является одним из механизмов взаимодействия между разными программами,
проблема только в том, что программа-ядро должно дать актуальную версию интерфейса подключения, или же поддерживать все предыдущие, где одна из них известна программе-клиенту.

Опять же, мы говорим об обмене данными. Для использования рабочего экземпляра класса в другой области памяти (характерно DLL), можно использовать только COM (на сколько я знаю), т.е. программа-ядро реализует и предоставляет некий IManager, а программы-клиенты реализующие IPlugin и получающие при инициализации IManager, могут с ним работать.
А вот для использования той же области памяти (класс, переменная) другим процессом тут уже не знаю, скорее всего OLE-что-то из этой области. Вон, MSWork к примеру. Хочешь, новый запусти. НЕ хочешь, подключись к существующему, если можешь...

Последний раз редактировалось Человек_Борща; 25.01.2016 в 14:09.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работать, чтобы жить, или жить, чтобы работать? Arigato Свободное общение 33 27.06.2015 13:39
Объект String в памяти 9esa Общие вопросы C/C++ 19 25.04.2012 02:37
выделение памяти под объект VIK_aka_TOR Общие вопросы Delphi 4 15.02.2012 19:20
Если Вам скажут, что Вам жить 2 года, как вы будете жить? grenles Свободное общение 51 15.11.2010 21:59
Числа отдельно, хлам отдельно Keetotko Общие вопросы C/C++ 6 18.10.2010 18:15