写了一个简单的控制台程序做测试。
void GetInputThread(){
char buf[10];
fgets(buf,sizeof(buf),stdin);
//或者gets(buf);
}
int main(){
CreateThread(..,GetInputThread,..);
HANDLE handle=LoadLibrary("demo.dll");
//handle正常
FreeLibrary(handle);
//代码无法运行到这儿
}
demo.dll是IDE自带的dll例程模板。
如果新建线程运行gets或者fgets,FreeLibrary将锁死。
如果注释掉CreateThread,代码运行顺利。
求解
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ ){
switch (reason){
case DLL_PROCESS_ATTACH:
printf("DLL_PROCESS_ATTACH\n");
break;
case DLL_PROCESS_DETACH:
printf("DLL_PROCESS_DETACH\n");
break;
case DLL_THREAD_ATTACH:
printf("DLL_THREAD_ATTACH\n");
break;
case DLL_THREAD_DETACH:
printf("DLL_THREAD_DETACH\n");
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
可能是fgets引起的,你把fgets()注释掉,可能不会阻塞了
缓冲区溢出,检查一下你的buf分配的内存是否足够接收你的输入
要看的Demo.dll库DllMain中的DLL_PROCESS_DETACH里的代码里操作了什么~
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html