L'application principale de ma société utilise des documents OLE. Périodiquement, et de manière imprévisible, le programme ferme incorrectement ses documents modèles. Je pense que le problème pourrait être la façon dont nous fermons les fichiers lorsque l'utilisateur quitte l'application ou choisit Fichier/Fermer dans le menu. Après beaucoup de débogage/traçage, il revient àRELEASE C++ Macro Définition
/////////////////////////////////////////////////////////////////////////////
// 'Compound File' enabling in COleDocument
BOOL COleDocument::OnNewDocument()
{
// call base class, which destroys all items
if (!CDocument::OnNewDocument())
return FALSE;
// for file-based compound files, need to create temporary file
if (m_bCompoundFile && !m_bEmbedded)
{
// abort changes to the current docfile
RELEASE(m_lpRootStg);
// create new temporary docfile
LPSTORAGE lpStorage;
SCODE sc = ::StgCreateDocfile(NULL, STGM_DELETEONRELEASE|
STGM_READWRITE|STGM_TRANSACTED|STGM_SHARE_EXCLUSIVE|STGM_CREATE,
0, &lpStorage);
if (sc != S_OK)
return FALSE;
ASSERT(lpStorage != NULL);
m_lpRootStg = lpStorage;
}
return TRUE;
}
dans OLEDOC1.CPP (partie des bibliothèques MFC). Plus précisément, la ligne de macro RELEASE (m_lpRootStg). Avant d'exécuter cette ligne, en essayant de déplacer ou de supprimer le document, le système d'exploitation indique que le fichier est en cours d'utilisation. Après cette ligne, le fichier est fermé et peut être déplacé.
Je voudrais sous-classer cette méthode pour expérimenter d'autres façons de fermer le fichier. Mais, je ne trouve nulle part la définition de la macro RELEASE. Le plus proche je suis venu était du code d'IBM. Où est définie cette macro? Quelle est la définition?
Merci! Quand j'ai cliqué avec le bouton droit sur la macro pour aller à la définition, cela m'a ramené au code de mon application. Pour une raison quelconque, je l'ai manqué dans la sortie FINDSTR. –