BUG: OLE 2.0 Containers & 1.0 Objects that Close w/out Saving (109547)
The information in this article applies to:
- Microsoft OLE 1.0
- Microsoft OLE Libraries for Windows and Win32s 2.0
- Microsoft OLE Libraries for Windows and Win32s 2.01
- Microsoft OLE Libraries, when used with:
- the operating system: Microsoft Windows NT 3.5
- the operating system: Microsoft Windows NT 3.51
- the operating system: Microsoft Windows 95
This article was previously published under Q109547 SYMPTOMS
When an OLE 1.0 object is inserted into an OLE 2.0 container document and
then closed without an update being invoked, the correct streams for that
object are not written to storage. Any subsequent attempt by the container
to load the object will fail.
CAUSE
When the OLE 1.0 object is closed without an update, the OLE 2.0 container
receives an IAdviseSink::OnClose() message without having first received an
IClientSite::SaveObject() message. Unless the container takes steps to work
around this problem, incorrect streams will be saved.
RESOLUTION
To protect against this scenario, OLE 2.0 containers that want data to be
available after an OLE 1.0 object closes without updating can implement
code similar to the following pseudocode:
OleCreate();
OleRun();
IOleObject::Update(); \\ To get a snapshot of the data.
OleSave(); \\ To save the data to storage.
IOleObject::DoVerb();
Alternatively, the container could just delete any objects that call
IAdviseSink::OnClose() without first calling IClientSite::SaveObject().
STATUS
Microsoft has confirmed this to be a problem in the products listed at the
beginning of this article. We are researching this problem and will post
new information here as it becomes available.
MORE INFORMATION
For more information about known idiosyncrasies of embedding or linking OLE
1.0 objects into OLE 2.0 containers, please see the "Compatibility with OLE
1.0" section of the OLE SDK Help file.
Modification Type: | Minor | Last Reviewed: | 3/3/2005 |
---|
Keywords: | kbBug KB109547 |
---|
|