VB中调用WindowsAPI的注意事项

VB中调用WindowsAPI的注意事项,第1张

VB中调用WindowsAPI的注意事项,第2张

API说到底是一系列底层功能,是系统提供给用户访问操作系统核心进行高级编程的方式。通过在Visual Basic应用程序中声明外部过程,可以访问Windows API(和其他外部dll)。过程声明后,调用它的方法和调用Visual Basic自己的过程是一样的。

作为一个高效的编程环境,Visual Basic (VB)封装了一些Windows API函数,但也牺牲了一些API函数。在调用API时稍有不慎,就可能导致API编程错误、难以捕获或间歇性错误,甚至程序崩溃。为减少API编程错误,提高VB调用API的安全性,应注意以下八个问题:

(1)指定“选项显式”

编程前,在VB编程环境中选择“需要变量声明”。如果未指定此项,任何简单的输入错误都可能导致“变量”变量。调用API时,VB会对变量进行强制转换以避免冲突。因此,VB将为各种类型(如字符串、长整数、整数、浮点数等)传递空值。,导致程序无法正常运行。

(2)注意VB整数和Win32整数的区别。

在VB环境下,涉及到的整数都是16位,但是一旦涉及到C/C++Win32文档,就是32位了。在阅读与Windows API函数或32位动态链接库相关的资料或应用时,要特别注意分析和理解环境背景,以便区分数据类型和数据结构,正确声明API函数。

(3)尽量减少和避免使用

虽然用As Any方法声明库可以让Windows API函数接受各种类型的参数,但更严重的是,即使是很小的错误,比如缺少类型标识符或者错误地使用ByVal关键字,也可能导致系统崩溃或者其他难以发现的数据错误。

(4)注意检查参数类型。

除了因缺少ByVal关键字而导致的错误之外,大约50%的API错误是由于声明中不正确的参数类型造成的。在Win32环境下,无论是8位、16位还是32位的数值变量都以32位传递,如果同时使用,很难发现错误。如果声明的参数类型不一样,VB把它当作一个变量传递给API函数,就会出现“错误的DLL调用规范”的消息。

(5)别忘了ByVal,保证函数声明的完整性。

ByVal按值调用。当传递参数时,指向DLL的指针不会传递给参数变量本身,而是将传递的参数值的副本传递给DLL。例如,在传递字符串参数时,VB和DLL之间的接口支持两种类型的字符串。如果不使用ByVal关键字,VB会将指向DLL的函数指针传递给一个OLE2.0字符串(即BSTR数据类型),而Windows API函数往往不支持这种数据类型,从而导致错误。使用ByVal关键字后,VB将字符串转换成C语言格式的“空 termination”字符串,API正确使用。

(6)重新检查函数名。

在Win16环境下,API函数的名称不需要区分大小写,而在Win32环境下,则需要区分大小写。当在DLL函数中找不到声明的函数时,有必要检查函数的名称。对于管理字符串的函数,是否缺少a和w前缀。

(7)提前初始化字符串,避免冲突。

如果API函数需要一个指向缓冲区的指针,以便从缓冲区加载数据,并且传递了字符串变量,则应该首先初始化字符串长度。因为API无法知道字符串的长度——默认情况下API已经为其分配了足够的长度。没有初始化字符串,分配给字符串的缓冲区可能会不够用,API函数可能会在缓冲区的末尾反复重写,内存中字符串后面的内容也会被重写的乱七八糟。程序显示为突然终止或间歇性错误。

(8)跟踪和检查参数、返回类型和返回值。

VB有即时模式和单步调试功能。利用这个优势,我们可以保证函数声明的类型是明确的(API不返回Variant类型)。通过跟踪检查参数的来源和类型,可以消除参数的错误传递。许多API函数都有返回结果,表明它们是否已经成功执行。如果要测试返回的结果,可以使用VB的ERR对象的lastDLErrOR方法来查阅这些信息。对于错误,可以调用API函数,检索API函数GetlastError的结果,修改语句,达到正确调用API函数的目的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VB中调用WindowsAPI的注意事项

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情