C++/CLI アセンブリ (このアセンブリはネイティブ C++ dll のラッパーです) をテストする C# プログラムがありますが、次のエラー メッセージが表示されます。
Unhandled exception at 0x50f8fd85 (msvcr90d.dll) in TestKeyManagerApp.exe: 0xC0000005: Access violation writing location 0x00000000.
デバッグ モードの最後の位置: dbgheap.c (Visual Studio 2008 出力)
if (pHead == NULL)
{
*errno_tmp = ENOMEM; <----- ACCESS VIOLATION
RTCCALLBACK(_RTC_FuncCheckSet_hook,(1));
}
アセンブリ クラスのオブジェクトを 1 回作成し (C# プログラムのプライベート メンバー)、コンストラクターでネイティブ C++ dll をロードします。アセンブリ オブジェクトを 2 回目に使用すると (テスト関数の 2 回目の呼び出し)、このエラー メッセージが表示されます。
コール スタックの出力:
msvcr90d.dll!_heap_alloc_dbg_impl(unsigned int nSize=532, int nBlockUse=2, const char * szFileName=0x50ec24a8, int nLine=588, int * errno_tmp=0x00000000) Line 431 + 0x3 bytes C++
msvcr90d.dll!_nh_malloc_dbg_impl(unsigned int nSize=532, int nhFlag=0, int nBlockUse=2, const char * szFileName=0x50ec24a8, int nLine=588, int * errno_tmp=0x00000000) Line 239 + 0x19 bytes C++
msvcr90d.dll!_calloc_dbg_impl(unsigned int nNum=1, unsigned int nSize=532, int nBlockUse=2, const char * szFileName=0x50ec24a8, int nLine=588, int * errno_tmp=0x00000000) Line 593 + 0x20 bytes C++
msvcr90d.dll!_getptd_noexit() Line 588 + 0x1a bytes C
msvcr90d.dll!_errno() Line 281 + 0x5 bytes C
msvcr90d.dll!_calloc_dbg(unsigned int nNum=1, unsigned int nSize=532, int nBlockUse=2, const char * szFileName=0x50ec20a4, int nLine=373) Line 646 + 0x11 bytes C++
msvcr90d.dll!__CRTDLL_INIT(void * hDllHandle=0x50ec0000, unsigned long dwReason=2, void * lpreserved=0x00000000) Line 373 + 0x18 bytes C
msvcr90d.dll!_CRTDLL_INIT(void * hDllHandle=0x50ec0000, unsigned long dwReason=2, void * lpreserved=0x00000000) Line 214 + 0x11 bytes C
ntdll.dll!77c68968()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!77c73820()
ntdll.dll!77c735bc()
ヒントやヒントをいただければ幸いです。
どうも!