COMの呼び出しのタイムアウト間隔を変更する

MFCアプリケーションから、WordやExcelなどのCOMを呼び出して実行する際に、処理に時間が掛かることがあります。あまり時間が掛かり過ぎるとタイムアウトになり「サーバー使用中」のメッセージが頻繁に出てくるため、場合によっては煩わしくなってしまいます。

com_timeout.png


そこで下記のコードの様に、“SetMessagePendingDelay”関数でタイムアウト間隔をミリ秒単位で変更することで、メッセージの出てくる頻度を抑えることができます。
#include <afxole.h>

BOOL CSampleApp::InitInstance()
{
	// OLE ライブラリを初期化します。
	if (!AfxOleInit())
	{
		AfxMessageBox(_T("OLEライブラリ 初期化失敗"));
		return FALSE;
	}

	// COMの呼び出しのタイムアウト間隔を設定(ミリ秒)
	AfxOleGetMessageFilter()->SetMessagePendingDelay(10000);
}
参考URL(Microsoft サポート)
COM を使用した処理に長時間を要するとき [サーバー使用中] ダイアログ ボックスが表示されないようにする方法
OK キャンセル 確認 その他