Как освободить InMemoryWorkspaceFactory в элементе управления картой ESRI?
Я встраиваю ESRI Map Control в пользовательский элемент управления ActiveX, написанный на MFC/C++. Пользовательский элемент управления ActiveX служит оболочкой для элемента управления Map, поэтому я могу встроить его в определенную среду, которая является только средой выполнения и нереляционной. Благодаря этому сайту я могу загрузить характерные точки в рабочую область в памяти. Однако среда хостинга теперь застревает в памяти при закрытии, и это происходит только тогда, когда я использую InMemoryWorkspaceFactory. Поэтому я пришел к выводу, что фабрика заблокировала файл или ресурс и, не выпуская их, приводит к тому, что среда хоста никогда не закрывается.
Есть ли способ, которым я могу вручную удалить все объекты и классы объектов во время сообщения WM_DESTROY моего элемента управления ActiveX и полностью освободить рабочее пространство? Похоже, что нет аналога метода Create в IWorkspaceFactory. Мой код выпускает все интерфейсы для фабрики рабочих пространств, но, очевидно, внутри ArcObjects все еще есть ссылки внутри.
1 ответ
Я обнаружил ответ на свой вопрос. Это было не рабочее пространство в памяти, которое нужно было закрывать, это был ArcObjects в целом. Решение заключается в том, чтобы во время сообщения WM_DESTROY вызывать метод Shutdown интерфейса IAoInitialize.