说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB中访问API函数之防错技巧

HTML文档下载 WORD文档下载 PDF文档下载
VB中访问API函数之防错技巧


郭少越
  功能强大的API(应用程序接口)函数对于VB程序员来说,不愧是很好的编程工具,然而使用API函数的程序员也许都遇到这样的现象。在VB集成环境下,程序运行后,出现一错误信息对话框,按确定键后系统自动退出VB集成环境,此时如果你的程序尚未存盘,那末很遗憾挽回损失已回天乏力。最后一次存盘之后的程序都不复存在。这是你对API函数使用不当引起的一般保护故障(GPF)。
  当一个GPF错发生时,你应允许Windows关闭你的应用。有些情况下你可能需要退出Windows或者重新引导系统。出错程度视哪里内存被破坏而定。DLL(动态链接库)函数中的类型不一致等错误是GPF错的主要原因。这些错误会导致GPF甚至使Windows系统完全崩溃(需要重新引导系统)。
  下面谈避免GPF的一些技巧。
  用别名来提供强类型检查是避免GPF的有效措施之一。有些情况下,DLL函数可以接受多种类型,LoadCursor函数就是这样一个例子,其定义如下:
HCursor LoadCursor(hInstance,lpCursorName)
  这里HCursor是一个指向光标对象的16位句柄,hInstance是一个16位实例句柄,lpCursorName是光标的名字或者是光标资源的32位整数ID。为了支持两种类型的lpCursorName参数。VB有必要包含如下两个声明:
DeclareFunction LoadCursor Lib"USER"(ByVal hInstance As Integer,ByVal lpCursorName As String)As Integer

DeclareFunction LoadCursor Lib"USER"(ByVal hInstance As Integer,ByVallpCursorName As Long)As Integer
  但是,这两个声明不能在一个程序中同时存在,因为Visual Basic会报重复声明错。我们知道,As Any声明可使得任何参数都可以传递给DLL函数,因此可以如下声明:
DeclareFunction LoadCursor Lib"USER"(ByVal hInstance As Integer ,ByVal lpCursorName As Any )As Integer
  上述声明意味着Visual Basic能支持一个参数可接受多种类型的DLL函数,然而这就可能带来各种灾难性的后果,每当偶然情况下用不正确的参数调用该函数时,都可以引发一个GPF,我们可以这样进行严格的类型检查并且帮助防止这类问题。
  这种方法就是在函数的声明中使用Alias技巧,看看下面的两个声明:
DeclareFunction LoadCursorByName Lib"USER"Alias "LoadCursor"(ByVal hInstance As Integer,ByVal lpCursorName As String)As Integer
DeclareFunction LoadCursorByID Lib"USER"Alias "LoadCursor"(ByVal hInstance As Integer ,ByVallpCursorName As Long)As Integer
  LoadCursorByName用字符串做lpCursorName参数访问DLL函数LoadCursor, 而LoadCursorByID访问同样的DLL函数LoadCursor,但是用长整型做lpCursorName参数,这两个函数都对lpCursorName参数进行严格的类型检查,使Visual Basic能在调用DLL函数之前识别出不正确的变量类型,最大限度地减少引起GPF或者导致系统崩溃的机会。
  除此之外,使用API函数时运行之前最好先存盘,仔细检查调用API函数的参数与声明的类型是否一致,以及严格检查参数是否有效都能减少引发GPF或者系统崩溃。

VB的API编程精粹(一) VB调用API函数技巧快速选择全部项目 VB调用API函数使窗口保持在最上层 VB中调用Windows API的注意事项 VB中访问API函数之防错技巧 本网站与某论坛合作,该论坛有固定域名,可不可以通过域名解析实现访问。 关于在cpp中使用stl用法注意! 如何在程序中监测带有用户名和密码框的窗体和网页! 语音聊天室里的 全双工语音 是怎么个做法 菜鸟问题,怎么做POPMENU菜单? 虚心求教,百分相赠,(有关循环单链表) vb程序问题 很想结识一些学习C++的朋友. 50求树状控件Dome. 滴定镍离子的EDTA标准熔液配制过后多久可以标定? 哪些电子废弃物含有金 这种元素? 电子废弃物回收有什么价值吗?我家有好多电子废弃物啊 拖拉机耕地,第一天耕了一块地的25%,第二天耕了这 生物都具有的特征 A·具有废物的能力 B·具有繁殖 什么叫电子测量?电子测量具有哪些特点? 各个动物有什么特点?主要把动物的皮.身体等的结构说 一辆拖拉机耕一片地,第一天耕了这片地的3/2,;第 谁知道 武汉环洋船舶管理有限公司 这个公司啊. 中日学者激烈交锋 钓鱼岛问题差异难以日媒曝美国曾向日本求助“监听中国光缆德媒爆出内幕:默克尔电话2002年就美媒:美是全球不多的超级大国 不得不美媒:安倍把日本带向一个不屈服于美国桂城:提升城市韵味 做强大“实力派“新中式 简约静谧美被指泄漏台湾当局机密 张显耀:听后不ISIS成员在白宫外“秀国旗” 留言靖国神社缘何成日本政治秀场民国之山寨英雄官幕我的双胞胎女友鬼宗师纨绔卡尊樱花屋旅游南庄旅游喀什博物馆旅游玉素甫哈斯哈吉甫墓旅游盘橐城旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘