投稿時間: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
|