COMプログラミングをはじめよう

COMとは

 COMというのは「Component Object Model」の頭文字を取ったものだ。
 初めて「COM」を耳にしたときは「command.com」のような実行ファイルの拡張子のcomを思い 浮かべたが...拡張子とはまったく関係ない。

 COMというのはActiveXやOCXと同じものだ。
 深く解説すればするほど難解になるのであまり深く「何なんだろう?」と考えない方がいいだ ろう。



COMの例

 Windows上ではほとんどの機能がCOMとして作られている。
 例えば...いい例が思いつかないが、WindowsはCOMの塊のようなものだ。プログラミングを してみると分かりやすいかもしれない。例えば以下の関数はインターネットショートカット、つ まりお気に入りなどに入っているようなURLに対するショートカットファイルを作成する関数だ。

 ファイルを作成する関数にもかかわらずfopenやCreateFileのような通常のファイル作成関数 を利用していない。これはWindowsがCOMとして備えているショートカットファイルを作成するた めの機能を利用しているためだ。

bool	CreateInternetShortcut(LPCTSTR urlText, LPCTSTR linkPathName)
{
	HRESULT	hr;

	CComPtr	pURL;
	CComPtr				pPersistFile;

	::CoCreateInstance(CLSID_InternetShortcut, NULL, CLSCTX_INPROC_SERVER,IID_IUniformResourceLocator,(LPVOID*)&pURL);
	if(pURL == NULL)
		return	false;

	pURL->QueryInterface(IID_IPersistFile,(void**)&pPersistFile);
	if(pPersistFile == NULL)
		return	false;

	pURL->SetURL(urlText,0);

#ifdef  _UNICODE
	hr = pPersistFile->Save(linkPathName, TRUE);
#else
	wchar_t		wlinkPathName[MAX_PATH*2];
	::MultiByteToWideChar(CP_ACP,0,linkPathName,-1,wlinkPathName,MAX_PATH*2);
	hr = pPersistFile->Save(wlinkPathName,TRUE);
#endif

	return	SUCCEEDED(hr) ? true : false;
}



カテゴリー「VC++ TIPS」 のエントリー