win32 C,一个只有几行的的demo,不知FreeLibrary为何阻塞,求解

写了一个简单的控制台程序做测试。

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