Archive for 5月 10th, 2012
-
Hello, COM(ATL) World!
Posted on 5月 10th, 2012 by cx20
COM(ATL)
COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
COM を用いて開発された部品であれば言語を問わず利用することができる。
以下は Visual C++ / ATL による COM クライアント(事前バインディングならびに実行時バインディング)の例となっている。ソースコード(事前バインディング)
#include <atlbase.h> #include <shlobj.h> int _tmain(int argc, TCHAR* argv[] ) { CoInitialize( NULL ); CComPtr<Folder> pFolder; CComPtr<IShellDispatch> pShell; pShell.CoCreateInstance( CLSID_Shell ); CComVariant vRootFolder( ssfWINDOWS ); pShell->BrowseForFolder( 0, L"Hello, COM(ATL) World!", 0, vRootFolder, &pFolder ); if ( pFolder != NULL ) { pFolder = NULL; } pShell = NULL; CoUninitialize(); return 0; }
ソースコード(実行時バインディング)
#include <atlbase.h> int _tmain(int argc, TCHAR* argv[] ) { CoInitialize( NULL ); CComPtr<IDispatch> pShell; pShell.CoCreateInstance( L"Shell.Application" ); DISPPARAMS param = { NULL, NULL, 0, 0 }; CComVariant varg[4]; varg[0] = 36L; // VT_I4 ssfWINDOWS varg[1] = 0L; // VT_I4 varg[2] = L"Hello, COM(ATL) World!"; // VT_BSTR varg[3] = 0L; // VT_I4 CComVariant vResult; pShell.InvokeN(L"BrowseForFolder", varg, 4, &vResult ); CComPtr<IDispatch> pFolder = vResult.pdispVal; if ( pFolder != NULL ) { pFolder = NULL; } pShell = NULL; CoUninitialize(); return 0; }
コンパイル方法(Visual C++)
C:¥> cl hello.cpp
実行結果
+----------------------------------------+ |Browse For Folder [X]| +----------------------------------------+ | Hello, COM(ATL) Wolrd! | | | | +------------------------------------+ | | |[Windows] | | | | +[addins] | | | | +[AppCompat] | | | | +[AppPatch] | | | | +[assembly] | | | | : | | | | : | | | | : | | | +------------------------------------+ | | [Make New Folder] [ OK ] [Cancel] | +----------------------------------------+