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>
#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;
} |
#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++)
実行結果
+----------------------------------------+
|Browse For Folder [X]|
+----------------------------------------+
| Hello, COM(ATL) Wolrd! |
| |
| +------------------------------------+ |
| |[Windows] | |
| | +[addins] | |
| | +[AppCompat] | |
| | +[AppPatch] | |
| | +[assembly] | |
| | : | |
| | : | |
| | : | |
| +------------------------------------+ |
| [Make New Folder] [ OK ] [Cancel] |
+----------------------------------------+ |
+----------------------------------------+
|Browse For Folder [X]|
+----------------------------------------+
| Hello, COM(ATL) Wolrd! |
| |
| +------------------------------------+ |
| |[Windows] | |
| | +[addins] | |
| | +[AppCompat] | |
| | +[AppPatch] | |
| | +[assembly] | |
| | : | |
| | : | |
| | : | |
| +------------------------------------+ |
| [Make New Folder] [ OK ] [Cancel] |
+----------------------------------------+
Tags: COM
Categories: ATL, COM, library