VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2006/01/06(Fri) 17:38
投稿者moss
Eメール
URL
タイトルVBからダイアログを持つDLLの呼び出し

VBの問題かVCの問題かわかりませんでしたので、こちらで質問
させていただきます。

VCで作成したダイアログを持つDLLがVCで作成したアプリからは
呼び出せる(ダイアログが表示される)のに、VBから呼び出すと
アプリケーションエラーで終了します。
VBから呼び出すDLLは何度か作成したことはあるのですが、
ダイアログを表示するDLLは作成したことがありません。
DLLの作成に問題があるのか、VBでの呼び出しに問題があるのか
どちらなのでしょうか?

表示されるエラーの内容は以下のとおりです。
For infomation on how your program can cause an assertion
failure, see the Visual C++ documentation asserts.

1.作成するDLLの種類を「MFCの拡張DLL(MFCの共有DLL使用)」で作成開始

2.リソースから「Dialog」を挿入

3.エクスポートした関数に以下を記述

DATA型はユーザー定義
--------------------------------------------------------------------

static AFX_EXTENSION_MODULE hogeDLL = { NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    ウィザードが作成したソースのまま
}

//以下エクスポートした関数
int WINAPI hoge(DATA *pData)
{
    int rtn;
    TRY
    {
        HINSTANCE    hInstResClient = AfxGetResourceHandle();
        AfxSetResourceHandle( hogeDLL.hModule );

        int        rc;
        ChogeDlg    dlg;    // ダイアログクラス

        //ウィンドウ表示
        rc = dlg.DoModal();

        AfxSetResourceHandle( hInstResClient );

        if ( rc != IDOK ) return( -1 );

        return( 0 );
    }
    CATCH_ALL( e )
    {
        // a failure caused an exception.
        return( -1 );
    }
    END_CATCH_ALL

    return( 0 );
}
--------------------------------------------------------------------

4.呼び出し元VBを作成
標準モジュール
Option Explicit

''データを受け取る際の構造体
Public Type DATA
    aaa As String * 256
    bbb As String * 256
    ccc As String * 256
End Type

Declare Function hoge Lib "hoge.dll" (ByRef pData As DATA) As Long

Form1
Private Sub CmdSearch_Click()
    Dim rtn As Long
    Dim pData As DATA
    
    rtn = hoge(pData)
    
    MsgBox rtn
End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -