Article ID: 181894
Article Last Modified on 1/7/2006
APPLIES TO
- Microsoft Visual C++ 2005 Express Edition
- Microsoft Visual C++ .NET 2003 Standard Edition
- Microsoft Visual C++ .NET 2002 Standard Edition
- Microsoft Visual C++ 6.0 Professional Edition
- Microsoft Visual C++ 6.0 Enterprise Edition
- Microsoft Visual C++ 6.0 Standard Edition
- Microsoft Visual C++ 5.0 Professional Edition
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 4.0 Standard Edition
- Microsoft Office 97 Standard Edition
This article was previously published under Q181894
SYMPTOMS
You are performing intensive OLE Automation, most likely in
a loop without user intervention, and receive the following error message:
The remote procedure call failed.
CAUSE
Every thread that uses COM or OLE must call the CoInitialize function
or the OleInitialize function, respectively. When this call is made, the OS creates a
hidden top-level window, owned by your thread, for implementation purposes.
Because the OS relies on Windows messaging behind-the-scenes, your thread
should, and in some cases MUST, pump messages. Failure to do so can result in
automation errors, and sometimes in a deadlock situation when another
application broadcasts a message to all top-level windows (for example, an
application might broadcast a WM_WININICHANGE or WM_SETTINGCHANGE message to
notify other applications the default printer has changed).
RESOLUTION
If you are using OLE Automation in a loop (for example,
writing out 10,000 rows of data to Microsoft Excel), you need a PeekMessage
loop inside your loop so that messages will get processed.
STATUS
This behavior is by design.
REFERENCES
Microsoft Visual C++ online for
PeekMessage
For more information, click the following article number to view the article in the Microsoft Knowledge Base:
136885
OLE threads must dispatch messages
Additional query words: excel office rpc -2147418095 800706BE 0x800706BE
1726
Keywords: kberrmsg kbtshoot kbthread kbautomation kbprb KB181894