HttpOpenRequest的问题"/>
调试::HttpOpenRequest的问题
今天调试一段代码,这段程序之前可以运行,但是在我加入一些新的内容以后,再运行就出问题了,出现
First-chance exception in HttpAndFtpTest.exe (KERNEL32.DLL): 0xC0000005: Access Violation
的警告,后来跟踪进去,发现在
CONST TCHAR *szAcceptType=__HTTP_ACCEPT_TYPE;
_hHTTPRequest=::HttpOpenRequest( _hHTTPConnection,
__HTTP_VERB_GET, // HTTP Verb
szURI, // Object Name
HTTP_VERSION, // Version
NULL, // Reference
&szAcceptType, // Accept Type
INTERNET_FLAG_KEEP_CONNECTION | NTERNET_FLAG_NO_CACHE_WRITE,
0); // context call-back point
这段出了问题,搜了下网上,刚好有个人总结了该函数的问题,出现这个问题的原因是因为强制把szAcceptType这个1维数组变成2维数组,它的第二个数组没有'\0'结尾所导致的访问冲突。
我将第一句改成
CONST TCHAR *szAcceptType[2]={__HTTP_ACCEPT_TYPE,NULL};
就可以了。
总结:
1、在别的程序可以正确运行的程序,不一定是正确的,可能因为某些原因,刚好可以错误运行。不能因为这段程序在别的环境可以运行就以为一定正确。
2、这个函数的原型是:
HINTERNET WINAPI HttpOpenRequest(
HINTERNET hConnect,
LPCTSTR lpszVerb,
LPCTSTR lpszObjectName,
LPCTSTR lpszVersion,
LPCTSTR lpszReferrer,
LPCTSTR* lplpszAcceptTypes,
DWORD dwFlags,
DWORD dwContext
);
其中 LPCTSTR* lplpszAcceptTypes, lplpsz表示其是二维的文本指针,既然如此,那么就要注意各个文本的结束符问题,这个是最重要的,以后在看msdn的函数时,一定要注意相关的问题。
转载于:.html
更多推荐
调试::HttpOpenRequest的问题
发布评论