Microsoft KB Archive/111577

= BUG: IOleObject::Close(OLECLOSE_NOSAVE) and DoVerb =

Article ID: 111577

Article Last Modified on 3/3/2005

-

APPLIES TO

 Microsoft OLE 2.01 Microsoft OLE 4.0, when used with:  Microsoft Windows NT 4.0

 Microsoft Windows NT 3.51 Service Pack 5

 Microsoft Windows 95 </li></ul>

-

<div class="notice_section">

This article was previously published under Q111577

<div class="symptoms_section">

SYMPTOMS
An OLE 2.0 container application inserts a new embedded object into a document. The container calls IOleObject::Update on the object to update the cache, then calls IOleObject::Close(OLECLOSE_NOSAVE) to transition the object back to the loaded state. Finally, the container tries to rerun the object by calling IOleObject::DoVerb.

In this particular scenario, DoVerb will return STG_E_FILENOTFOUND, and the object will not be rerun.

<div class="cause_section">

CAUSE
Because the container specifies OLECLOSE_NOSAVE when calling Close, the object is never saved to persistent storage. However, the object has internally been marked as not being a brand new object. Consequently, when the container calls DoVerb, the object's handler calls IPersistStorage::Load on the object, attempting to put the object into the running state. This call will fail, because the object has never been saved.

<div class="resolution_section">

RESOLUTION
The solution to this problem is for the container to specify OLECLOSE_SAVEIFDIRTY when calling Close.

<div class="status_section">

STATUS
Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article.

Additional query words: 2.10 3.50 4.00 kbbuglist

Keywords: kbbug KB111577

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.