我在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;
}
{
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;
}
解决方案 »
- 为什么找不到Column.h和Columns.h这两个头文件呢。
- ADO中_RecordsetPtr中的AddNew方法发生异常怎么处理
- Sharepoint service 3.0 和 Sharepoint 2007有什么区别呢? Sharepoint service 3.0怎么配置成Form认证呢?
- dll 加载顺序的问题?
- 请问如何让没有TitleBar的对话框,能响应任务栏左键最小化事件?多谢啊~
- 控件中工具栏(toolbar)不显示提示(tooltips)的问题
- 注入Explorer.exe中后,dll键盘挂钩失效了!
- 开发视频聊天软件用什么好?Netmeeting可以吗?好像NetMeeting将被停用 微软拟用Live Meeting取代
- 求一函数实现10进制数转换成16进制数,在线等,解决结贴
- 请问:在VC中如何解决以下问题?
- 在word中如何移动activex控件? 高手请进
- 问一下如何改变CTreeCtrl中指定item的高度啊,用SetItemHeight是把所有的Item的高度都变了
应该是这个: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;
}
导出一个函数来做测试