コンソールアプリケーションでのOCXの使用方法:ステップバイステップガイド

コンソールアプリケーションでActiveXコントロールを使用することは、プログラミングやC++言語になじみがない場合、 dauntingに見えることがあります。OCXファイルをコンソールアプリケーションにドロップして簡単なテストを行いたいと考えたことがある方は多いでしょう。このブログ記事では、そのプロセスを簡単かつ効率的にご紹介します。

OCXとその利用についての理解

OCXファイルは、再利用可能なOLE(Object Linking and Embedding)コントロールを含むバイナリファイルです。ユーザーインターフェイスなどの機能を埋め込むために使用されることが多く、コンソールアプリケーションを含むさまざまなアプリケーションで非常に便利です。

Visual C++を使った始め方

すでにVisual C++がインストールされていると仮定して、コンソールアプリケーションでOCXコントロールをテストするための簡単な方法をご紹介します。

ステップ1: 環境を整える

以下のものが準備されていることを確認してください。

  • Visual C++がインストールされていること(コンパイルにはcl.exeを使用します)。
  • OCXファイル(システムに登録されていることを確認してください)。

ステップ2: コンソールアプリケーションを作成する

  1. 新しいテキストファイルを作成します。名前はtest.cppにしてください。ここにコードを書きます。
  2. テキストエディタで開き、以下のコードをコピーします:
#include "windows.h"
#include "shobjidl.h"
#include "atlbase.h"

//
// compile with:  cl /EHsc test.cpp
//

BOOL CALLBACK RemoveFromTaskbarProc( HWND hwnd, LPARAM lParam )
{
    ITaskbarList* ptbl = (ITaskbarList*)lParam;
    ptbl->DeleteTab(hwnd);  
    return TRUE;
}

void HideTaskWindows(ITaskbarList* ptbl)
{
    EnumWindows(RemoveFromTaskbarProc, (LPARAM) ptbl);
}

BOOL CALLBACK AddToTaskbarProc( HWND hwnd, LPARAM lParam )
{
    ITaskbarList* ptbl = (ITaskbarList*)lParam;
    ptbl->AddTab(hwnd); 
    return TRUE; // continue enumerating
}

void ShowTaskWindows(ITaskbarList* ptbl)
{
    if (!EnumWindows(AddToTaskbarProc, (LPARAM) ptbl))
        throw "Unable to enum windows in ShowTaskWindows";
}

int main(int, char**)
{
    CoInitialize(0);

    try {
        CComPtr<IUnknown> pUnk;

        if (FAILED(CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**) &pUnk)))
            throw "Unable to create CLSID_TaskbarList";

        CComQIPtr<ITaskbarList> ptbl = pUnk;
        if (ptbl)
            ptbl->HrInit();

        HideTaskWindows(ptbl);
        MessageBox(GetDesktopWindow(), _T("タスクバーをチェックしてください!"), _T("StackOverflow FTW"), MB_OK);
        ShowTaskWindows(ptbl);
    }
    catch(TCHAR * msg) {
        MessageBox(GetDesktopWindow(), msg, _T("エラー"), MB_OK);
    }       

    CoUninitialize();
    return 0;
}

ステップ3: コードをコンパイルする

このコードをコンパイルするには、開発者用コマンドプロンプトを開き、test.cppファイルがあるディレクトリに移動してください。次のコマンドを使用します:

cl.exe /EHsc test.cpp

ステップ4: アプリケーションを実行する

コンパイルが完了したら、生成された実行可能ファイルを実行します。すべてが正しく設定されていれば、メッセージボックスとWindowsタスクバーとのインタラクションが表示されるはずです。

コードの理解

  • COM初期化(CoInitialize): COM関数を呼び出す前に、CoInitialize()でCOMを初期化する必要があります。
  • インスタンスの作成: このコードでは、CoCreateInstance()を使用してTaskbarListクラスのインスタンスを作成します。これがあなたのOCXです。
  • タスクバーの操作: HideTaskWindowsShowTaskWindowsの関数は、タスクバー内のウィンドウを操作する方法を示しています。

エラーハンドリング

try-catch文の使用により、プログラムの実行中に発生したエラーがメッセージボックスで通知されます。これはデバッグに非常に重要です。

まとめ

コンソールアプリケーションでOCXをテストすることは、難しいことではありません。正しい設定とCOMコンポーネントおよびActiveXの理解があれば、アプリケーションに簡単に統合できます。このステップバイステップガイドに従うことで、すぐにOCXコントロールを自信を持って使用できるようになるでしょう。

何か問題が発生した場合は、遠慮なくお問い合わせいただくか、ドキュメントを参照してください。楽しいコーディングを!