An error message occurs when you are performing intensive OLE Automation in a loop in Visual C++: “The remote procedure call failed”

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.


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).


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.


This behavior is by design.


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

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

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

Leave a Reply

To prove that you're not a bot, enter this code
Anti-Spam Image