本帖最后由 VisualEleven 于 2013-07-26 10:53:40 编辑

解决方案 »

  1.   

    lpctUrl2="&tn=baiduhome_pg&ie=utf-8';
    是lpctUrl2="&tn=baiduhome_pg&ie=utf-8";吧
      

  2.   

    你Debug下看看或者MessageBox输出来看看不就知道URL正不正确了
      

  3.   

    中间加上
    MessageBox ( NULL , lpctUrl , "打开网页" , MB_OK); 
    显示正常,看不出问题。
    把这段代码用在百度搜索上,可以运行正常。但是用在其他网站上(有连续页面的)却不行了。MessageBox显示地址正确,并且地址复制到浏览器地址栏内也能正常浏览,但是程序却罢工了。
    所以我怀疑这段代码有问题,尤其是生成网址字符串的方法。不知道有没有好点的办法,更通用点的、更健康的?
      

  4.   

    LPCTSTR lpctUrl1;//固定的字符串
    LPCTSTR lpctUrl2;//固定的字符串
    lpctUrl1="http://www.baidu.com/s?wd=vc&pn=";
    lpctUrl2="&tn=baiduhome_pg&ie=utf-8';因为你使用LPCTSTR,所以下面的串需要用TEXT或者 _T包起来.
    lpctUrl1= TEXT("http://www.baidu.com/s?wd=vc&pn=");
    lpctUrl2= TEXT("&tn=baiduhome_pg&ie=utf-8");不过, 你是VC6.0, 默认是多字符集环境, 刚好没有问题.
    下面同理
    wsprintf 需要改成 TCHAR版本的.  _stprintfTCHAR strUrl[0x200] = {0};
    _stprintf(strUrl,TEXT("%s%d%s"),lpctUrl1,i,lpctUrl2);//生成格式化字符串
     hOpenUrl= InternetOpenUrl ( hLink, //使用已经打开成功的网络连接
                strUrl,//指定URL
                NULL,//指定发送到HTTP服务器的头信息
                0, //指定发送到HTTP服务器的头信息长度
                INTERNET_FLAG_RELOAD, 
                0);然后就可以使用fidder抓包, 看什么原因了. 也许你的URL已经对了, 但是服务器确实没有返回结果.
    如果没有fidder, 可以把_stprintf的结果URL串strUrl直接复制到浏览器上去测试.
      

  5.   

    按照楼上方法,
    #include <tchar.h>  
    #include <stdio.h>  
    加入上面两行后实现成功。非常感谢!
    问题估计出在_stprintf和wsprintf函数用法上。
    但是使用TEXT()和_stprintf函数后
    _stprintf(lptUrl,TEXT("%s%d"),lpctUrl1,i);//生成格式化字符串
    lpcUrl=lptUrl;//指针格式转换,通过中间变量进行
    这两个变量还是用
    LPCTSTR lpctUrl;//作为InternetOpenUrl第二个参数使用 
    LPTSTR lptUrl;//作为函数wsprintf的输出参数
    后面这个转换就通不过编译,为什么呢?
      

  6.   

    总结一下:希望各位继续指点
    方法1:(可行)
    #include <tchar.h>  
    #include <stdio.h>LPCTSTR lpctUrl1;//固定的字符串
    LPCTSTR lpctUrl2;//固定的字符串lpctUrl1=TEXT("HTTP://FDFFFFFFD111");
    lpctUrl2=TEXT("FDFFFFFFD222");TCHAR strUrl[0x200] = {0};
    _stprintf(strUrl,TEXT("%s%d%s"),lpctUrl1,i,lpctUrl2);//生成格式化字符串 hOpenUrl= InternetOpenUrl ( hLink, //使用已经打开成功的网络连接
    strUrl,//指定URL:
    方法2:(可行)
    #include <tchar.h>  
    #include <stdio.h>lpctUrl1=TEXT("HTTP://FDFFFFFFD111");
    lpctUrl2=TEXT("FDFFFFFFD222");
    lptUrl="";
    _stprintf(lptUrl,TEXT("%s%d%s"),lpctUrl1,i,lpctUrl2);//生成格式化字符串 hOpenUrl= InternetOpenUrl ( hLink, //使用已经打开成功的网络连接
    lptUrl,//指定URL:
    NULL,//指定发送到HTTP服务器的头信息
    0, //指定发送到HTTP服务器的头信息长度
    INTERNET_FLAG_RELOAD, 
    0);//传递给回调函数的参数
    方法3:(不行,为什么?)
    #include <tchar.h>  
    #include <stdio.h>LPCTSTR lpctUrl1;//固定的字符串
    LPCTSTR lpctUrl2;//固定的字符串lpctUrl1=TEXT("HTTP://FDFFFFFFD111");
    lpctUrl2=TEXT("FDFFFFFFD222");LPCTSTR lpctUrl;//作为InternetOpenUrl第二个参数使用 
    LPTSTR lptUrl;//作为函数wsprintf的输出参数_stprintf(lptUrl,TEXT("%s%d%s"),lpctUrl1,i,lpctUrl2);//生成格式化字符串
    lpcUrl=lptUrl;//这里出错cannot convert from 'char *' to 'int'hOpenUrl= InternetOpenUrl ( hLink, //使用已经打开成功的网络连接             
    lpctUrl,//指定URL             
    NULL,//指定发送到HTTP服务器的头信息             
    0, //指定发送到HTTP服务器的头信息长度             
    INTERNET_FLAG_RELOAD,              
    0); 
      

  7.   

    上面总结有误,方法3也是可以的。变量名搞错了。
    看来关键问题还是要用函数_stprintf和TEXT()。