Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, john_silver, Вы писали:
Vi2>_>>Гм. Читаем в MSDN описание метода IPersistFile::Load ()
_>>"When the object has been loaded, your implementation should register the object in the Running Object Table (see IRunningObjectTable::Register)."
Vi2>Не обращай внимания. Это относится к компаудным документам (реализующим IOleObject и т.п.) и к самому IPersistFile не имеет отношения. Потому как моникера регистрации нет. Да и требовать от этого интерфейса не свойственных ему функций — несуразица. Хотя для своих объектов это и можно сделать.
Я как-то привык обращать внимание на то, что написано в документации

С чего ты взял "к самому IPersistFile не имеет отношения"??? Ну не надо фантазий про компаундные документы, они в рассматриваемом случае ни при чем

Вот тебе пример из MSDN, раздел "Monikers and Persistence", учи матчасть.
STDMETHODIMP Gorilla::Load(const OLECHAR *pszFileName,
DWORD grfMode) {
// read in persisted object state
HRESULT hr = this->MyReadStateFromFile(pszFile, grfMode);
if (FAILED(hr)) return hr;
// get pointer to ROT from SCM
IRunningObjectTable *prot = 0;
hr = GetRunningObjectTable(0, &prot);
if (SUCCEEDED(hr)) {
// create a file moniker to register in ROT
IMoniker *pmk = 0;
hr = CreateFileMoniker(pszFileName, &pmk);
if (SUCCEEDED(hr)) {
// register self in ROT
hr = prot->Register(0, this, pmk, &m_dwReg);
pmk->Release();
}
prot->Release();
}
return hr;
}
_>>Что делать-то? Не может быть, чтобы ни у кого не возникало подобной проблемы.[/q]
Vi2>А по-моему тут нет никакой проблемы. Регистрация в ROTе имеет одну ссылку на объект.
Регистрация в ROT имеет сколько угодно ссылок на объекты с одним моникером.
Vi2>Пока сам объект не захочет убраться из системы, ROT его будет держать.
Это в случае strong reference (ROTFLAGS_REGISTRATIONKEEPSALIVE). Weak reference, которую я имел в виду, держать объект не будет.
Vi2>А кто уж его регистрит в ROT — это издержки проектирования. Главное — кто удалять будет!
Проблема с многозадачностью есть и при добавлении, и при удалении, причем, независимо от того, кто будет удалять. А вот решения не приведено, зачем трепаться тогда?
Эх, ну дадно, все понятно, буду сам думать.