0
我公司的主要應用程序使用OLE文檔。該程序定期且不可預測地關閉其模板文檔不當。所以在打開時看起來隨機的時候,操作系統會拋出STG_E_SHAREVIOLATION
RELEASE C++宏定義
我認爲這個問題可能是我們在用戶退出應用程序或從菜單中選擇File/Close時關閉文件的方式。經過大量的調試/追蹤,它歸結爲OLEDOC1.CPP(MFC庫的一部分)中的
/////////////////////////////////////////////////////////////////////////////
// '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;
}
。特別是RELEASE(m_lpRootStg)宏行。在執行此行之前,嘗試移動或刪除文檔會導致操作系統說文件正在使用中。在這一行之後,文件被關閉並且能夠被移動。
我想這個方法的子類來試驗關閉文件的替代方法。但是,我無法在任何地方找到RELEASE宏的定義。我最近來的是IBM的一些代碼。這個宏定義在哪裏?定義是什麼?
謝謝!當我右鍵單擊宏以進入定義時,它將我帶回到我的應用程序自己的代碼中。出於某種原因,我在FINDSTR輸出中錯過了它。 –