Если вы можете разместить эти две глобальные переменные в одной и той же DLL, это не та же история. Как сказал Джем в своем собственном ответе, система отладки DLL не гарантируется системой. Поэтому у вас может возникнуть большая проблема при наличии 2 разделенных Dll. Я не системный гуру Windows, но, взглянув с помощью google, я нашел msdn bloggers, который говорит, что у них была одна и та же проблема, при этом не было хорошего решения для ее решения.
Я могу разместить их в одной DLL-библиотеке, по моему мнению, это проще, в этом случае вам не нужно решать проблему «не гарантированного DLL-набора» (неразрешимо, насколько я понимаю).
Но тогда вам еще нужно решить новую проблему: глобальный порядок уничтожения переменных не гарантируется языком C++. Но этот вопрос можно решить:
вам нужно использовать какой-то справочный couting. boost :: shared_ptr может сделать трюк.
Объявить его глобальным и определить его таким образом:
boost::shared_ptr my_resource_ptr (new Resource()); // new operator is important here!
Затем вам нужно изменить вашу реализацию пользователя в магазин свой собственный shared_ptr:
class User
{
...
boost::share_ptr a_resource_ptr;
...
};
Пока все один из ваших Пользовательский экземпляр не будет уничтожен, они будут «сохранять» экземпляр ресурса и, таким образом, не позволяют удалить его из-за сверхестественности, даже если глобальный shared_ptr может быть уничтожен.
Последний уничтоженный экземпляр пользователя (непрямо) удалит экземпляр ресурса.
Независимо от используемого подсчета ссылок, ComPtr, ваш собственный, он должен сделать трюк.
Есть ли способ изменить реализацию? Или 2 dll предоставляются третьей стороной? –
Я могу переместить определение 2 статических объектов в одну и ту же DLL, но не в том же cpp. Может ли это помочь? –