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;
}







