装载dll时引起Ntdll.dll异常
我执行下面的代码(my.exe),在执行到FreeLibrary(hCheckDll);产生以下的错误:
exception in my.exe(NTDLL.dll):)xC0000008:Invalid Handle.
int CMainFrame::OnTestdll()
{
int ret = 0;
typedef int (WINAPI *CHECK)();
CHECK CheckCurrent;
LPCTSTR lpDllFile = _T("Bin\\SerCtrl.dll");//SerCtrl.dll HMODULE hCheckDll = ::LoadLibrary(lpDllFile);
if(hCheckDll)
{
CheckCurrent = (CHECK)::GetProcAddress(hCheckDll, "GetMatherBoardType");
if(CheckCurrent!=NULL)
{
ret = (CheckCurrent)();
}
::FreeLibrary(hCheckDll);//上面都执行的很好
}
return ret;
}
这个DLL大致是这样写的:
/*
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
*/
int GetMatherBoardType( )
{
int nMbType = 0;
if(bServiceOpen == FALSE )
KOpenService( );
nMbType = OperateHW.GetBoardType();
OperateHW.CloseFile();
KMemService.StopService();
KMemService.DestroyService();
return nMbType;
}
........
我不知道为什么,
问题点数:20、回复次数:2Top
1 楼JoeXu(我是一个诗人)回复于 2002-03-31 00:25:47 得分 0
这个问题已经解决了,是因为我在DLL中2次closehandle了一个handleTop
2 楼mathma(math-to-math)回复于 2002-07-04 20:08:25 得分 20
明白Top




