分享
 
 
 

在VB6中用WINDOWS API函数读写INI文件

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在VB6中用WINDOWS API函数读写INI文件

WinInet(Win32 Internet functions)提供给程序员一套完整的Internet调用函数,它被包含在一个名为Wininet.dll的动态联接库里。通过它可以轻松地完成对HTTP,FTP以及Gopher的访问。比如下载HTML页面;发送FTP请求从而上传或下载文件还可浏览目录列表,典型的应用是可以通过匿名登录获取文件,还有你更新自己的主页时上传文件;Gopher的菜单系统使你可以获取英特网上的资源。对于这三个协议来说,使用它们的步骤是相同的:建立联接——向服务器提出请求——关闭联系。当然你也可以通过MFC(Microsoft Foundation Class)更为简单地(甚至是傻瓜式地)使用WinInet。因为在MFC中,你可以简单地像访问硬盘一样访问HTTP、FTP以及Gopher服务器(当然不是指可以乱涂乱画啦……);你更可以不去理睬WinSock和TCP/IP;当然你完全有可能自己从底层写起,我想其中一个明显的原因是你认为MFC不够快,放心吧同志,这不是写3D游戏……不过要是你认为它不够灵活的话,那只有自己写了,没什么大不了的;还有就是你可以用现成的类(CHttpFile、CFtpFileFind、CGopherFileFind)控制你的数据,因为这些类把这三个协议抽象到了高层的应用程序编程界面,提供快速并且简单的方法。所以对于用Visual C++的你来说,你至少有两种方法来使用WinInet:直接调用Win32 Internet Functions和MFC。下面就分别用这两种方法通过HTTP下载Web页面,为了更明朗地说明问题,假设网络畅通无阻,所以你会看到下面的代码都没有错误或异常处理。准备好一个单文档界面的自动生成项目,它的视的基类最好是CEditView,这样可以直接把获取的信息显示出来;添加一个工具栏图标,在视中相应消息OnGetHttp()。

首先通过直接调用Win32 Internet Functions下载http://www.hust.edu.cn下的缺省页面,将要用到的下面几个函数:AfxParseURL(或者它的扩展AfxParseURLEx)、InternetOpen、InternetConnect、HttpOpenRequest、HttpSendRequest、InternetReadFile、InternetCloseHandle。不用多说,你也可以从它们的名字里猜出它们的功能,函数说明请可以参阅MSDN。

void CWinInetTestView::OnGethttp()

{

//使用Win32API获取页面

CString strURL = ″http://www.hust.edu.cn″;

HINTERNET hSession;

HINTERNET hConnect = NULL;

HINTERNET hURL = NULL;

try

{

CString strServer,strObject;

INTERNET_PORT nPort;

DWORD dwServiceType;

//分析给定的URL, 取回服务信息

AfxParseURL(strURL,dwServiceType, strServer, strObject, nPort);

//初始化网络动态联接库,通常用户只需要调用一次InternetOpen,

//但多次调用InternetOpen是允许的,

//比如需要对不同的实例提供不同的代理服务器

hSession=::Internet Open(″WinInet Test″,

INTER-NET_OPEN-TYPE-PRECONFIG,

(LPCTSTR)NULL,

NULL,0);

//联接服务器

hConnect=::Internet Connect(h Session,strServer,

INTER-NET-INVALID-PORT-NUMBER,

″″, ″″,

INTERNET-SERVICE-HTTP,

0,0) ;

const char *lpszAcceptTypes[2] = {_T(″Accept: text/* \r″), NULL};

//获得指定的HTTP句柄

hURL = ::HttpOpenRequest(hConnect, ″GET″, strObject,

HTTP_VERSION, NULL, lpszAcceptTypes,INTERNET-FLAG-EXISTING-CONNECT|

INTER-NET-FLAG-NO_AUTO-REDIRECT|

INTERNET-FLAG-DONT-CACHE|

INTERNET-FLAG-RELOAD,0) ;

//向HTTP服务器发送请求

::HttpSendRequest(hURL,NULL,0,0,0);

CString sText;

TCHAR sz[1024];

DWORD dwBytesRead;

BOOL bOkay = TRUE;

//循环接收

while(bOkay)

{

bOkay = ::InternetReadFile(hURL,sz,1023,&dwBytesRead);

if(bOkay && dwBytesRead > 0)

{

sz[dwBytesRead-1] = '\0';

sText = sz;

sText.Replace(_T(″\n″), _T(″\r\n″));

GetEditCtrl().ReplaceSel(sText);

}

else break;

} }

catch(……)

{

}

//关闭相关句柄

::InternetCloseHandle(hURL);

::InternetCloseHandle(hConnect);

::InternetCloseHandle(hSession);

}

下面用MFC完成同样的工作,可以看得出,需要写的代码相对减少了,而且更为简单,当你写大程序时,这一点更为明显。需要用到的几个类是:CInternetSession、CHttpConnection、CHttpFile。

void CWinInet TestView::OnGethttp()

{

CInternetSession internetSession(″WinInetTest″, 1, PRE-CONFIG-INTERNET-ACCESS);

CHttpConnection* m-pHttpServer;

CHttpFile* m-pHttpFile;

try

{

CString strServer;

CString strObject;

INTERNET_PORT nPort;

DWORD dwServiceType;

AfxParseURL(strURL, dwServiceType, strServer, strObject, nPort);

m_pHttpServer =internetSession.GetHttp Connection(strServer, nPort);

m-pHttpFile=m-pHttpServer→OpenRequest(CHttpConnection::HTTP-VERB_GET,

strObject, NULL, 1, NULL, NULL, INTER-NET-FLAG-EXISTING-CONNECT|INTERNET-FLAG-NO-AUTO-REDIRECT);

m_pHttpFile->AddRequestHeaders(_T(″Accept: text/*\r\n″));

m_pHttpFile->SendRequest();

CString sText;

TCHAR sz[1024];

while (m_pHttpFile->ReadString(sz, 1023))

{

sText = sz;

sText.Replace(_T(″\n″), _T(″\r\n″));

GetEditCtrl().ReplaceSel(sText);

} }

catch(……)

{

}

if (m_pHttpFile != NULL)

delete m_pHttpFile;

if (m_pHttpServer != NULL)

delete m_pHttpServer;

internetSession.Close();

}

需要注意的是,以上两段代码都没有运用多线程技术,当线路不好或页面很大时,你的程序就像是死了一样,没有反应。所以呢,你应当恰当地运用多线程技术,结合相关的状态回调函数,提供给用户一个友好的操作界面。当然,别忘了控制错误异常,这在网络编程中显得尤其重要

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有