我在DLL调用InternetOpenUrl函数的时候,DLL直接卡死,而且不能使用GetLastError()函数得到错误ID.不知道那个地方出现问题,请各位大虾们帮忙解决下!!附:我尝试过把WININET API直接换成MFC类库,也在打开URL的时候失败卡死.但是我朋友用DELPHI编译出来的相同代码的DLL却可以访问网络.所以这个问题令我比较迷茫.请各位仁兄帮忙解决下,感谢!!我的代码如下:UINT DownLoadFile(TCHAR *szURL ,  TCHAR *szFilename)
{
long lTimeout = 5000;
HINTERNET hSession = ::InternetOpen("Wolf Explorer" , INTERNET_OPEN_TYPE_PRECONFIG , NULL , NULL , 0);
::InternetSetOption(hSession ,INTERNET_OPTION_CONNECT_TIMEOUT  , &lTimeout ,sizeof(long));
if(NULL==hSession)
{
_PRINTERROR("Failed to open internet" , "Error");
::InternetCloseHandle(hSession);
return 1;
}
HINTERNET hNet=::InternetOpenUrl(hSession , szURL , NULL , 0 , INTERNET_FLAG_DONT_CACHE , 0);
if(NULL==hNet)
{
printf("error id:%ld\n" , ::GetLastError());
_PRINTERROR("Failed to Connect internet" , "Error");
::InternetCloseHandle(hNet);
::InternetCloseHandle(hSession);
return 2;
}
BYTE Buf[1024] = {0};
DWORD dwNum = 1;
HANDLE hFile = ::CreateFile(szFilename , GENERIC_ALL , 0 , NULL , CREATE_ALWAYS , 0 , NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
::InternetCloseHandle(hNet);
::InternetCloseHandle(hSession);
return 3;
}
while(dwNum>0)
{
DWORD dwWrite;
::InternetReadFile(hNet , Buf , sizeof(Buf) , &dwNum);
WriteFile(hFile , Buf , dwNum , &dwWrite , NULL);
}
CloseHandle(hFile);
::InternetCloseHandle(hNet);
::InternetCloseHandle(hSession);
return 0;
}
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
 )
{
if(ul_reason_for_call==DLL_PROCESS_ATTACH)
{
MessageBox(NULL , "DF","DF" , 0);
CString x = "http://www.baidu.com/";
CString y ;
DownFile(x , y);
MessageBox(NULL , y , x , 0);
}
return TRUE;
}

解决方案 »

  1.   

    不好意思.DLLMain函数给错了.
    应该是这个:BOOL APIENTRY DllMain( HANDLE hModule, 
                          DWORD  ul_reason_for_call, 
                          LPVOID lpReserved 


    if(ul_reason_for_call==DLL_PROCESS_ATTACH) 

    MessageBox(NULL , "DF","DF" , 0); //测试是否被调用
    DownLoadFile("http://www.baidu.com" , "C:\\1.txt");

    return TRUE; 
      

  2.   

    不要在DllMain里做调用测试,会造成程序死锁
    导出一个函数来做测试
      

  3.   

    导出函数是测试成功的.我想知道的是为什么DELPHI编译出来的能成功,而MFC不行
      

  4.   

    跟踪过了。我的题目标题“DLL调用InternetOpenURL莫名失败”,就是我跟踪的结果,在调用InternetOpenURL函数的时候,不返回,不报错,直接卡死。思考了N久也不明白,所以请各位大侠帮忙下!
      

  5.   

    各位大侠能找出原因的,我多用现金50RMB报答。请大家一定多多帮忙!