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