Перед мной встала задача совместного использования одного объекта, заложенного в dll-ку...
То есть запускается приложение — вызывает функцию из dll-ки, она возвращает указатель на объект(или интерфейс). Если объект был уже создан возвращается указатель на существующий объект.
С этой задачей я почти справился. Так как еще не решил проблему с разрушением объекта при выгрузке dll из памяти.
Здравствуйте, Keeper_andrew, Вы писали:
KA>Перед мной встала задача совместного использования одного объекта, заложенного в dll-ку...
KA>То есть запускается приложение — вызывает функцию из dll-ки, она возвращает указатель на объект(или интерфейс). Если объект был уже создан возвращается указатель на существующий объект.
KA>С этой задачей я почти справился. Так как еще не решил проблему с разрушением объекта при выгрузке dll из памяти.
А в чем проблема-то?
Тебе требуется, чтобы приложение узнало о том, что объект более недоступен (из-за выгрузки dll)?.. Ну, используй какой-нить callback.
А вообще-то это всё ооочень криво продумано. Убивать dll с работающим сервером объекта — это подход, мягко говоря, неправильный.
Здравствуйте, Michael Chelnokov, Вы писали:
MC>Здравствуйте, Keeper_andrew, Вы писали:
KA>>Перед мной встала задача совместного использования одного объекта, заложенного в dll-ку...
KA>>То есть запускается приложение — вызывает функцию из dll-ки, она возвращает указатель на объект(или интерфейс). Если объект был уже создан возвращается указатель на существующий объект.
KA>>С этой задачей я почти справился. Так как еще не решил проблему с разрушением объекта при выгрузке dll из памяти.
MC>А в чем проблема-то? MC>Тебе требуется, чтобы приложение узнало о том, что объект более недоступен (из-за выгрузки dll)?.. Ну, используй какой-нить callback.
Наверное я неправильно выразился. Приложение по идее само должно вызвать функцию dll-ки, которая разрушит объект. Так оно и планируется сделать. Но на всякий случай хотелось бы отловить внутри dll-ки событие перед ее выгрузкой, на которое вызвать разрушение объекта. в делфи я помню что есть специальная секция для этого, но там она срабатывала не всегда, и пишу я на VC7.
MC>А вообще-то это всё ооочень криво продумано. Убивать dll с работающим сервером объекта — это подход, мягко говоря, неправильный.
Возможно ты и прав, я думал над этим. Но к сожалению ничего лучшего придумать не могу (наверное старею ).
Здравствуйте, Michael Chelnokov, Вы писали:
MC>Здравствуйте, Keeper_andrew, Вы писали:
KA>>Перед мной встала задача совместного использования одного объекта, заложенного в dll-ку...
KA>>То есть запускается приложение — вызывает функцию из dll-ки, она возвращает указатель на объект(или интерфейс). Если объект был уже создан возвращается указатель на существующий объект.
KA>>С этой задачей я почти справился. Так как еще не решил проблему с разрушением объекта при выгрузке dll из памяти.
MC>А в чем проблема-то? MC>Тебе требуется, чтобы приложение узнало о том, что объект более недоступен (из-за выгрузки dll)?.. Ну, используй какой-нить callback.
Наверное я неправильно выразился. Приложение по идее само должно вызвать функцию dll-ки, которая разрушит объект. Так оно и планируется сделать. Но на всякий случай хотелось бы отловить внутри dll-ки событие перед ее выгрузкой, на которое вызвать разрушение объекта. в делфи я помню что есть специальная секция для этого, но там она срабатывала не всегда, и пишу я на VC7.
MC>А вообще-то это всё ооочень криво продумано. Убивать dll с работающим сервером объекта — это подход, мягко говоря, неправильный.
Возможно ты и прав, я думал над этим. Но к сожалению ничего лучшего придумать не могу (наверное старею ).
Здравствуйте, Keeper_andrew, Вы писали:
KA>Наверное я неправильно выразился. Приложение по идее само должно вызвать функцию dll-ки, которая разрушит объект. Так оно и планируется сделать. Но на всякий случай хотелось бы отловить внутри dll-ки событие перед ее выгрузкой, на которое вызвать разрушение объекта. в делфи я помню что есть специальная секция для этого, но там она срабатывала не всегда, и пишу я на VC7.
При корректной выгрузке dll винда вызывает ее DllMain с fdwReason установленным в DLL_PROCESS_DETACH.
Здравствуйте, Keeper_andrew, Вы писали:
MC>>А вообще-то это всё ооочень криво продумано. Убивать dll с работающим сервером объекта — это подход, мягко говоря, неправильный. KA>Возможно ты и прав, я думал над этим. Но к сожалению ничего лучшего придумать не могу (наверное старею ).
Кстати, сочетание слов "DLL" и "объект" навевает мысль о COM и inproc-серверах объектов. Подумай над этим. Зачем изобретать велосипед, когда можно воспользоваться готовыми решениями?