我有一个使用WinInet的VC++应用程序。它执行以下操作:
-
电话
LoadLibrary()
-
电话
InternetAttemptConnect()
-
电话
InternetOpen()
-
InternetConnect()
提供
INTERNET_SERVICE_FTP
作为
dwService
如果最后一次呼叫失败(通常是因为传递了错误的密码)
Internet连接()
返回0,这应该通过将错误写入日志并退出应用程序来处理。
当这种情况发生时,应用程序调用
InternetCloseHandle()
关闭句柄返回
InternetOpen()
然后离开
WinMain()
.
在此之后,库卸载开始-要么是一个静态对象持有一个句柄wininet.dll被破坏了
FreeLibrary()
被称为或
免费图书馆()
由Windows调用。不管怎样
免费图书馆()
它通常与以下调用堆栈挂起:
ntdll.dll!KiFastSystemCallRet()
ntdll.dll!NtWaitForSingleObject() + 0xc
kernel32.dll!WaitForSingleObject() + 0x12
wininet.dll!InternetInitializeAutoProxyDll() + 0xe3
wininet.dll!InternetInitializeAutoProxyDll() + 0x193e
wininet.dll!771b159d()
ntdll.dll!LdrInitializeThunk() + 0x24
ntdll.dll!LdrDisableThreadCalloutsForDll() + 0x949
kernel32.dll!FreeLibrary() + 0x19
MyApp.exe!$E5() + 0x10 C++ <-presumably the static object destructor call
msvcr71.dll!doexit(int code=0, int quick=0, int retcaller=0) Line 376 C
msvcr71.dll!exit(int code=0) Line 303 + 0xd C
MyApp.exe!wWinMainCRTStartup() Line 406 C <-entry point of my application
kernel32.dll!RegisterWaitForInputIdle() + 0x49
有时它只是在没有合理的调用堆栈显示的情况下崩溃。我想问题是WinInet还没有正确完成,处理这个问题需要一些额外的操作和时间。
这种情况有解决办法吗?