CloseThreadpoolCleanupGroupMembers参数异常,何原因

CloseThreadpoolCleanupGroupMembers参数错误,何原因?
自己定制线程池,使用“清理组”,线程池代码封装在DLL中,大致代码如下:

调用CloseThreadpoolCleanupGroupMembers函数,

//变量定义如下
PTP_CLEANUP_GROUP  g_pTPCG; //清理组指针
PTP_POOL  g_pTPPOOL; //线程池对象指针
TP_CALLBACK_ENVIRON  g_TPCE; //线程池环境变量变量



case DLL_PROCESS_ATTACH:
{
//创建线程池
g_pTPPOOL = CreateThreadpool(NULL);
//初始化线程池环境变量
InitializeThreadpoolEnvironment(&g_TPCE);
//创建"清理组"
g_pTPCG = CreateThreadpoolCleanupGroup();
//将线程池环境变量与线程池对象进行绑定
SetThreadpoolCallbackPool(&g_TPCE, g_pTPPOOL);
//将清理组 与 线程池环境进行绑定
SetThreadpoolCallbackCleanupGroup(&g_TPCE, g_pTPCG, NULL);
}
break;
... ... ...
... ... ...
case DLL_PROCESS_DETACH:
{
//销毁线程池
CloseThreadpoolCleanupGroupMembers(g_pTPCG, TRUE, NULL);
CloseThreadpoolCleanupGroup(g_pTPCG);
DestroyThreadpoolEnvironment(&g_TPCE);
CloseThreadpool(g_pTPPOOL);
}
break;


编写测试程序测试,程序退出,莫名的崩溃,然后使用WinDbg进行调式发现,提示CloseThreadpoolCleanupGroupMembers()函数参数错误,怀疑程序中改变了g_pTPCG指针的值,仔细查看,发现g_pTPCG的值没有发生改变,不知何故,特来请教一下大家了
------解决思路----------------------
没有完全理解楼主的意思

“发现g_pTPCG的值没有发生改变”是指什么?

g_pTPCG是由CreateThreadpoolCleanupGroup返回的,检查一下是否为NULL。如果为NULL,表示创建失败,调用GetLastError看是什么原因。
------解决思路----------------------
引用:
后来把DLL的代码移到EXE中,直接在EXE中创建线程池,销毁线程池,在EXE中调用没有发生错误导致崩溃,但在DLL中就会崩溃,实在想不明白,又限于WinDbg能力较弱,困扰中
我以前也碰到过测试DLL的时候出错,但是代码移植到一个单独的进程代码中又没问题的情况,一般情况都是没有初始化或者初始化错误没去检查,或者某些对像的初始化应该放在DLL之外而不是封装在DLL之内。我说的有点绕,不知道楼主头脑好不好使CloseThreadpoolCleanupGroupMembers参数异常,何原因
------解决思路----------------------
DETACH 是否执行了两次?开启appverif 看看能否发现什么错误?