VC作成dllをVB、ACCESSから呼び出すには?

解決


matsu  2006-11-09 08:31:25  No: 97152

初めてdllに挑戦していますが、VB, Accessから呼び出すと
正常に動作する時とエラーになる時があります。

VC:.NET2003
VB:.NET2003
ACCESS:2003  です。

(VC側)
extern "C" __declspec(dllexport) void __stdcall Dll_TestMessageBox();
extern "C" __declspec(dllexport) void __stdcall Dll_TestMessageBox(CString str)
{
  CString s = str; -------> (A)
  AfxMessageBox(s);
}

(VB, ACCESS側)
Declare Sub Dll_TestMessageBox Lib "D:\xxx\yyy\DllTest.dll" (ByVal a As String)
Call Dll_TestMessageBox("123")

VB、ACCESS共にメッセージボックスは表示されません。
(A)を
CString& s = str;
にすると、VB、ACCESS共にメッセージボックスは表示され、正常終了します。

ちなみに(A)を最初のままでVCで呼び出すと
typedef void (__stdcall *DISPLAYMESSAGE)(CString);

HINSTANCE hDllInstance;
DISPLAYMESSAGE Dll_TestMessageBox;  // 関数アドレス

hDllInstance = ::LoadLibrary("D:\\xxx\\yyy\\DllTest.dll");

if( hDllInstance != NULL )
{
    Dll_TestMessageBox = (DISPLAYMESSAGE)(::GetProcAddress(hDllInstance, "Dll_TestMessageBox"));
    if( Dll_TestMessageBox != NULL )
        Dll_TestMessageBox("123");
}
FreeLibrary(hDllInstance);

メッセージボックスは表示され、正常終了します。
VCとVB、ACCESSの違いはどこにあるのでしょうか?

よろしくお願いします。


matsu  2006-11-09 17:23:32  No: 97153

すみません!
板を間違えました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加