2010-08-05 6 views
0

J'encadre le contrôle de carte ESRI dans un contrôle ActiveX personnalisé écrit en MFC/C++. Le contrôle ActiveX personnalisé sert d'enveloppe de contrôle de carte afin que je puisse l'incorporer dans un environnement spécifique qui est seulement l'exécution et non relationnel. Grâce à ce site, je peux charger des points caractéristiques dans un espace de travail en mémoire. Cependant, l'environnement d'hébergement est maintenant bloqué en mémoire lorsqu'il est fermé, et il ne le fait que lorsque j'utilise InMemoryWorkspaceFactory. Ma conclusion, donc, est que l'usine a verrouillé un fichier ou une ressource et, en ne le libérant pas, provoque la fermeture de l'environnement hôte.Comment libérer une InMemoryWorkspaceFactory dans ESRI Map Control?

Est-il possible de supprimer manuellement toutes les fonctions et classes d'entités lors du message WM_DESTROY de mon contrôle ActiveX et de libérer complètement l'espace de travail? Il ne semble pas y avoir de contrepartie à la méthode Create de IWorkspaceFactory. Mon code libère toutes les interfaces de la fabrique d'espace de travail, mais apparemment, il existe toujours des références internes dans ArcObjects.

Répondre

0

J'ai découvert la réponse à ma question. Ce n'était pas l'espace de travail en mémoire qui devait être fermé, c'était ArcObjects en général. La solution consiste à s'assurer d'appeler la méthode Shutdown de l'interface IAoInitialize au cours du message WM_DESTROY.