投稿日 | : 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