○MFC ラッパー クラスによるActiveXの利用

▽サンプルとして使用するActiveX

testComはATLにより作成されており以下のメソッドを公開しています。
もちろんActiveXであればVB6で作成されたものでも、EXEでもDLLでも、利用できます。

STDMETHODIMP Cclass1::add(LONG* l)
{
	*l=*l+1;
	return S_OK;
}

testCom.dllはレジストリに登録されています。
登録名は、 testCom.class1 です。


■ラッパー クラスの作成

▽VC 6 でのラッパー クラスの作成

@クラスウィザードを開きます
Aクラスの追加→タイプライブラリから...を選択
BタイプライブラリからのインポートにてActiveXのファイルを指定し開きます。
Cクラスの確認ダイアログが表示されますので、OKを押します

▽VC 2002, 2003 でのラッパー クラスの作成

@プロジェクト→クラスの追加を選択します。
Aテンプレートから、TyoeLibからのMFCクラスを選択して開きます。
B使用できるタイプライブラリから、目的のActiveXを探します。
C必要なインターフェイス(class1)を選択して生成されたクラスに移動してから、完了ボタンを押します。


■ラッパークラスからActiveXの接続

ラッパークラスのヘッダーは testcom.h
ラッパークラスは Iclass1 とします


#include "testcom.h"//作成したラッパークラス

void CDdDlg::OnButton1() 
{
	CoInitialize(NULL);//COMを利用するスレッド毎に呼び出さなければならないAPI

	Iclass1 obj;//ラッパークラスのインスタンスを生成します。
	if(obj.CreateDispatch ("testCom.class1")){;// レジストリの登録名を指定して接続

		long l=10;
		obj.add(&l);
		TRACE("%ld\n",l);

		obj.ReleaseDispatch();// 切断
	}else{
		TRACE("接続エラー\n");
	}
}

■ActiveXへ文字列の受け渡し

▽VB6にて作成されたActiveX

Public Function addStr(a As String, b As String) As String
    addStr = a + b
End Function

▽MFCから上のActiveXへの接続部分

#include "CClass1.h"

void CaaaDlg::OnBnClickedButton1()
{
	CoInitialize(NULL);
	CClass1 obj;
	if(obj.CreateDispatch ("Project1.Class1")){;// レジストリの登録名を指定して接続
		CString str1="今日は";
		CString str2="晴天なり";
		BSTR a=str1.AllocSysString();
		BSTR b=str2.AllocSysString();
	CString l=obj.addStr(&a,&b);

		TRACE(l);
		obj.ReleaseDispatch();// 切断
	}else{
		TRACE("接続エラー\n");
	}
}

▽出力結果

今日は晴天なり



▲トップページ > Windows と C++