PRB: "The Remote Procedure Call Failed" During OLE Automation

ID: Q181894


The information in this article applies to:
  • Microsoft Visual C++, 32-bit Editions, versions 4.0, 5.0, 6.0
  • Microsoft Office 97 for Windows


SYMPTOMS

You are performing intensive OLE Automation, most likely in a loop without user intervention, and receive the following error:

The remote procedure call failed.


CAUSE

Every thread that uses COM or OLE must call CoInitialize() or OleInitialize(), 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.


MORE INFORMATION

Here is an example of a PeekMessage() loop you can use in your code.


   MSG msg;
   while(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)) {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   } 


REFERENCES

Microsoft Visual C++ online for PeekMessage().

© Microsoft Corporation 1998, All Rights Reserved.
Contributions by Joe Crump, Microsoft Corporation

Additional query words: excel office rpc -2147418095 800706BE 0x800706BE 1726

Keywords : kbcode kberrmsg kbole kbAutomation kbMFC kbVC400 kbVC500 kbVC600
Version : WINDOWS:97; winnt:4.0,5.0,6.0
Platform : WINDOWS winnt
Issue type : kbprb


Last Reviewed: July 28, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.