初めて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の違いはどこにあるのでしょうか?
よろしくお願いします。
すみません!
板を間違えました。
ツイート | ![]() |