ソフト開発塾 VCからVBのフォームを表示する。

まず、VB(AvtiveXDll)から作成しましょう。

1)新しいプロジェクトの新規作成タブで、ActiveX DLLを開きましょう。

すると、プロジェクト(Project1)とクラス(Class1)ができていますね。

2)プロジェクトのオブジェクト名をとりあえずここでは、TESTVBとしましょう。また、クラスのオブジェクト名は今回はそのままできましょう。

3)今回の課題は、VBのフォームを表示することなので、フォームを追加しましょう。

フォーム(Form1)ができていますね。このオブジェクト名もこのままにしておきましょう。

4)クラス(Class1)にSub FormShowを作成しましょう。

Sub FormShow()
    Dim frm As New Form1
    frm.Show vbModal
End Sub

 5)VB側は完成です。コンパイルして、TESTVB.DLLを作成しましょう。

では、次にVC

1)新規作成でMFC AppWizard(exe)で作成します。プロジェクト名 をとりあえず TESTVC にしましょう

2)テストなのでアプリケーションの種類をダイアログベースにしましょう。

3)テストなので、組み込む機能はなしでいきましょう。

4)

5)

6)

7)スケルトンの作業は終わりです。ワークスペースは次のようになっていますね。

8)ClassWizardでクラスの追加をします。

9)タイプライブラリから、VBで作成したTESTVB.DLLを開きます。

10)クラスの確認

11)ワークスペースはこんな感じになります。

12)クラス(CTESTVCDlg)にメンバ変数を追加

12)ソースを修正しましょう。

BOOL CTESTVCApp::InitInstance()の先頭に4行記述

BOOL CTESTVCApp::InitInstance()
{
    if (!AfxOleInit()){
        AfxMessageBox("OLE初期化失敗");
        return FALSE;
    }

BOOL CTESTVCDlg::OnInitDialog()の最後のreturnの前に次のソースを記述

COleException e;
CLSID clsid;
if (CLSIDFromProgID(OLESTR("TESTVB.Class1"), &clsid) != NOERROR){
    EndDialog(IDABORT);
    return FALSE;
}
LPUNKNOWN lpUnk;
LPDISPATCH lpDispatch;
if (GetActiveObject(clsid, NULL, &lpUnk) == NOERROR){
    HRESULT hr = lpUnk->QueryInterface(IID_IDispatch,(LPVOID*)&lpDispatch);
    lpUnk->Release();
    if (hr == NOERROR)
         m_vb.AttachDispatch(lpDispatch, TRUE);
}
if (m_vb.m_lpDispatch == NULL && !m_vb.CreateDispatch(clsid, &e)){
    EndDialog(IDABORT);
    return FALSE;
}
m_vb.FormShow();

おまけ 追加情報


トップページ ソフト開発塾 前のページへ戻る


参考にした方は、広告ページも訪れてください。よろしくお願いします。