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] |
+----------------------------------------+

Tags:

Categories: ATL, COM, library

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing