调试::HttpOpenRequest的问题

mac2022-06-30  19

今天调试一段代码,这段程序之前可以运行,但是在我加入一些新的内容以后,再运行就出问题了,出现

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的函数时,一定要注意相关的问题。

转载于:https://www.cnblogs.com/Salior/archive/2012/11/08/2759876.html

最新回复(0)