本記事は、COM Advent Calendar 2014 – Qiitaの1日目の記事です。書いてくださる方が現れない限り、25日までがんばるつもりです。


最初はCoInitializeExの話から始めることにしました。

ただIUnknownを使うだけでなく、COMの各種機能を使うには、何種類かある初期化関数と後始末の関数のどれかを呼び出す必要があります。今日取り上げるものはその中でもCoInitializeExです。内容は、「CoInitializeExを使うなら、COINIT_DISABLE_OLE1DDEを一緒に使おう」です。

#include <windows.h>
 
int main()
{
	CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
 
	CoUninitialize();
}

このことは、MSDNライブラリの中でも比較的初級者向けであろうC++ による Windows プログラミングの学習内、COM ライブラリを初期化する (Windows)でも取り上げられています。このようにマイクロソフトも推奨していると言って良いのではないでしょうか。

COINIT_DISABLE_OLE1DDEは、文字通り、またCOINITの説明にあるように、OLD1対応を無効にするオプションです。上記「COM ライブラリを初期化する」には、その分オーバーヘッドが減ると書かれていますね。

使い方はCOINIT_DISABLE_OLE1DDEを|演算子で追加するだけです。CoInitialize(nullptr)を使っていた場面では、CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)に替えられます。

そんなわけで、これから新しく書くコードでは、COINIT_DISABLE_OLE1DDEを使ってみませんか。

スポンサード リンク

この記事のカテゴリ

  • ⇒ COINIT_DISABLE_OLE1DDE使おう (CoInitializeEx)