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

在VB中使用API函数 (之三)

HTML文档下载 WORD文档下载 PDF文档下载
在VB中使用API函数 (之三)

 
Any

有些消息的参数声明为Any.这表示该参数是一种可变的类型(你可以以整型,字符串,用户自定义或其他的类型来传递).

这有一个这样的例子:

Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as Any) as Long

lParam 声明为Any并按引用(ByRef)传递.

这里是在这个函数中如果lParam是不同类型的值时应遵循的规则:

如果该值是 传递形式

numeric ByVal(as Long,or as Any)

Null ByVal(as Long,or as Any)

String ByRef(as String,or as Any)

Type ByRef(as Any)

array of Type ByRef(as Any)

如果你的函数声明同上面的一个而且你想传递一个Long型数,你应该这样写:

Call SendMessage(Me.Hwnd,WM_XXXX,0&,ByVal LongValue)

注意尽管头三个参数也是数值,但它们前边并没有ByVal.这是因为在函数声明中它们已经被声明为按值传递(ByVal).第四个参数,由于是按引用传递(ByRef)(VB并不知道你要传递参数的类型),因此你必须加上ByVal 你可以使用别名技术来传递不同类型的参数:

Public Declare Function SendMessageLng Lib "User32" Alias "SendMessageA"(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, ByVal lParam as Long) as Long

或:

Public Declare Function SendMessageStr Lib "User32" Alias "SendMessageA"(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as String) as Long

注意API参数类型本身是不会改变的.例子中的第四个参数总是一个4字节的长型数.当你按值(ByVal)传递一个Long或 Null时,该4字节长的数值就直接传递给函数.如果你传递一个String或其他的什么,你是按引用(ByRef)传递,VB传递的实际上是变量的地址,也是4个字节.

参数传递

你已经知道如何传递参数了,只需把他放到调用的函数中即刻.然而,当你使用API函数时,在传递参数是有一些你应该注意的 细节. ByVal还是ByRef. 通常情况下,你不用为此担心,VB的API浏览器已经为你做好了一切,只需你输入数值它就会照所声明的方式传递.总的来说,ByVal是把实际的数值传递给函数,而ByRef是把地址传给函数.唯一的麻烦就是 Any 类型. 把字符串传递给API函数也并不难.API函数需要的是字符串首字符的地址,然后读取该地址直到遇到一个Null字符.听起来很糟糕,但只是VB处理字符串的实际方法.你唯一要记住的是一定要按引用传递(ByRef)字符串 当你想得到所需的函数返回值信息时,情况有稍微的一点不同.

这里是GetComputerName函数的声明:

Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA"(ByVal lpBuffer As String, nSize As Long) As Long

第一个参数是一个指向字符串的远程指针,第二个参数是字符串的长度.

如果你只是简单的声明一个字符串类型的变量并把它传递给函数,就会出现错误.因此,你首先需要初始化字符串.这里是如何得到计算机名字的例子: Dim Buffer As String

Buffer = Space(255)

Ret& = GetComputerName(Buffer, Len(Buffer))

if Ret& > 0 then CompName$ = Left(Buffer, Ret&)

在这里,待传递的字符串被初始化为有255个空格的字符串.我们把它传递给函数同时还有它的长度.如果出错则返回值为0.

CompName中将保存计算机名. 有些函数也需要传递数组,这里是一个例子:

Declare Function SetSysColors Lib "user32" Alias "SetSysColors" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long

最后两个参数是Long型数组.为了传递数组,你只需传递它的第一个元素.下面是示例代码:

Const COLOR_ACTIVECAPTION = 2

Const COLOR_INACTIVECAPTION = 3

Const COLOR_CAPTIONTEXT = 9

Const COLOR_INACTIVECAPTIONTEXT = 19

Dim SysColor(3) As Long

Dim ColorValues(3) As Long

Dim Ret& SysColor(0) = COLOR_ACTIVECAPTION

SysColor(1) = COLOR_INACTIVECAPTION

SysColor(2) = COLOR_CAPTIONTEXT

SysColor(3) = COLOR_INACTIVECAPTIONTEXT

ColorValues(0) = RGB(58, 158, 58) '深绿

ColorValues(1) = RGB(93, 193, 93) '浅绿

ColorValues(2) = 0 '黑色

ColorValues(3) = RGB(126, 126, 126) '灰色

Ret& = SetSysColors(4&, SysColor(0), ColorValues(0))

该程序将改变所有活动和非活动窗口的标题栏背景和文本的颜色.
不创建DSN直接在程序中使用ODBC数据源-VB资料 不用 DATA 控件操作数据库文件 -VB资料 不用 EOF 以加快记录循环-VB资料 处理Select语句中的单引号 -VB资料 断开所有的数据连接 -VB资料 访问VB外来数据库 非access数据库在vb中的编程及应用 关闭程序中所有创建的数据库连接。 -VB资料 关闭所有的数据连接 -VB资料 关于数据报表的打印设置-VB资料 VB建立、改变及重构Access数据库-VB资料 结构化查询语言(SQL)详解之一-VB资料 利用VB使ACCESS数据库在网络使用中保持同步 返回 连接Data到多个表单-VB资料 列出 SQL Server 数据库中所有的存储过程-VB资料 列出MDB档当中所有table的名称-VB资料 您想知道有谁正在使用您的 Access 文件吗?(多人环境中)-VB资料 主题:浅谈Excel 的VB编程 巧用VB6的DataGrid实现通用电子表格 VB取得正确的 RecordCount 值 主題:如何动态新增、移除 ODBC DSN? -VB资料 VB如何将表中的数据导出到电子表格中 VB如何将文本文件转换为ACCESS数据库 VB如何將 Excel 的文件导入 Access文件? VB如何判断数据中是否存在某一表或查询 VB如何删除FoxPro数据库的数据? VB如何设置对VB数据库连接的动态路径 VB如何使用 ADO 來压缩或修复 Microsoft Access 文件 VB如何修改Foxpro数据库(不是用VB实现的,不过也可以看看) VB如何在 SQL 语句中使用日期? 返回 VB如何在表中保存单引号? 关于SQL的一些问题! 有没有熟悉CAD编程的高手,我们需要合作 关于数据库编程中的CDaoRecordset等几个问题!在线等待! 在这最后的大学时光里,我衷心感谢那些给我帮助的兄弟姐妹们!!! 想找lzw算法的源程序(c/c++) 那位朋友机器上有VS.net中文版的软件呀,如果可以的话,可以用pp共享,给200分 大家帮我看看这个怎么解决,解决了,另开帖送分!急! 请大家帮忙!!! 如何取消vb默认的应用程序忙对话框 请问这段代码哪里有误? 请问各位高手制作MediaPlayer问题,急急!!要交作业。 VB能做绿色软件吗?几十K的! &&&&&&小弟现在初学COM,有谁留下QQ,帮助小弟,小弟感激不尽。 十万火急 我想开发一些牌类和棋类的游戏,有什么外国的网站可以学到,和开放源代码。知道的请帮帮忙(100) 万分感谢 怎样配置运行.exe的CGI程序 请教,如何改变 TreeView的背景颜色? 一个算法问题 誰能介紹廣州几個做掌上電腦開發的牛一點的公司? 如何在客户端的Web Service请求中加入SOAP标头 Fortran中怎样实现类似 全局变量的实现方法。 关于无边框窗口 几个名词的英汉翻译,这样翻译对吗? JBuilder6个人版的注册号谁知道?急用!!! 高分求教 哪儿可以下载InstallShield 6.22(在线等待,急!!!!) 我要installshield 怎样backupwin98的注册表? ****************如何生成安装文件************* 求教这样一个角度算法 征求好网址!大家把收藏夹里的好网址贡献出来吧! 中国队惨了!!!!!!!贝克汉姆已加入土耳其队! 《Applied Cryptography》,这是本什么书? 一个12位的整型,用unsigned long可以容纳吗? Perl以后会变成什么样呢? 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 下面添加用户的代码能运行吗,我怎么运行不起来,50feng VC文本编辑器没有参数提示 在Delphi中如何使图像淡入淡出? 猜猜中国今天输几个,本人大胆预测10-0 为什么我这里总是405错误呀?Method Not Allowed……The requested method POST is not allowed ADO技术问题! HOOK还是不行! 在ocx中如何使用一个ActiveX,不算使用IMPORT,还有没有别的方法呢?(大送100分) API中的SETTEXTCOLOR函数! 部署实体bean的问题(jbuilder6+weblogic6)??? 怎么样自动增加一列在select UserID,AreaCode from table 。在先等候,先答来的100 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 调查:各位都用哪里的主页空间? 猜猜中国今天输几个,本人大胆预测10-0 结晶葡萄糖和聚葡萄糖一样吗? 化工原理液液萃取中,实验重相出口为什么采用Π(倒U)形管?Π(倒U)形管的高度是怎么确定的? 利用甲基氯和吡罗红两种染色剂对细胞进行染色,以观察DNA和RNA,依据的原理是? 葡聚糖和淀粉有什么区别 萃取实验的原理,还有分液什么的,希望讲的浅显一点 Br-,H+,Cu2+,K+,SO42-一定能大量共存吗 煤炭开采加工的流程是什么 炭和浓硫酸加热反应的炭和浓硫酸加热反应的的产物有H2O(g)、CO2和SO2,下面对三种产物的验证说法D.通入酸性高锰酸钾,紫色腿去,说明产物有SO2请问,D为什么是正确的? 观察DNA,RNA在细胞中分布,吡罗红甲基绿染色剂为什么用B液 pt950 pt990 pt900区别 那种铂金最好 硫代硫酸钠与硫酸反应 K+,SO42-,CU2+,NO3-为什么不能在pH=2的无色溶液中大量共存? 铂金和白金的区别是什么呀?无. 硫代硫酸钠和硫酸的反应,书上为什么说生成乳白色混浊?硫不是淡黄色的吗?>>>>>>>>>>>>> 浓硫酸和木炭加热的反应中浓硫酸表现了氧化性还有什么?如上 铂金PT990和PT950,PT900哪个是千足的啊白金难道没有纯白金的吗就比如黄金里面的24K千足金一样 过量硫(少量硫)与硫代硫酸钠分别反应后各生成什么? 杜邦漆哪里有卖?哪里有杜邦漆卖?要求正规的代理商,漆号是 powder coat,dupont black mini-tex II #UFB-611-T3.最好是北方的. D型葡萄糖与L葡萄糖的差别? 硫代硫酸钠和硫酸反应生成什么 DNA(甲基绿)/RNA(吡罗红)染色原理是什么?好像说甲基绿有两个正电荷什么的! D-葡萄糖与L-葡萄糖的区别 KNO3中H+、Fe2+、CL-、SO42-能否共存 亚油酸氧化速度为什么高于硬脂酸? 为什么1,2丙二醇能与氢氧化铜反应,1,3丙二醇不行? 含有大量NO3-的溶液:H+,Fe2+,SO42-,Cl- 能大量共存吗?含有大量Al3+溶液中NH4+会反应生成NH3吗? 亚油酸氧化速度为什么高于硬脂酸速度 葡聚糖 与 壳聚糖 的区别葡聚糖是真菌细胞壁的主要成分,葡萄糖聚合成的一种多糖。壳聚糖是由 几丁质在碱液中脱乙酰基形成的单体 聚合形成的高聚物,而几丁质(即甲壳质)是由乙酰 在观察DNA和RNA的试验中,为何一定要将甲基绿和吡罗红混合了才进行检测?如题~这样的效果好一点吗,为什么这样子做?如果单单加一样试剂可以吗? 硬脂酸 软质酸 油酸 亚油酸 他们的分子式 以丙醛为原料制取1,2——丙二醇,所需的反应类型依次是 如何分别鉴定DNA和RNA?(用化学试剂,不是甲基绿和吡罗红)(注意“分别”) 煤的干馏产物主要是各类有机物 这句话怎么错了 pp pe复合收缩率PP+PE两种塑料融合后的收缩率是多少? 甲基绿和吡罗红对DNA和RNA的亲和力不同,实验中应分别加入甲基绿和吡罗红 哪错了? 明矾结晶实验请详述具体过程,包括需要什么,要多长时间等等. 白金分PT900和PT950, 甲基绿和吡罗红在鉴定DNA ,RNA的显色原理. 明矾结晶实验时产生的几个问题.我在家里用明矾和蒸馏水做结晶实验(实验时加了150ml水,大概55g的明矾,到大约70度时就全溶了)冷却后很顺利的得到了结晶(不是我想要的那种,像初中化学 PT950铂金和Pt950铂金有区别吗 甲基绿和吡罗红对DNA,RNA亲和力不同,观察DNA和RNA在细胞中的分布实验中应分别加入甲基绿和吡罗红为何错? 杜邦膜的质量怎么样? 用什么东西能把凝固好的哥俩好迅速的融解掉啊? 使CO2分子结合为干冰的作用力是范德华力吗 杜邦汽车膜怎么样 请问化学实验中萃取是否包括分液? 为什么丙烯和氯水发生加成反应,和氯气发生取代反应? 为什么醋能去除杯子中的水垢、还有醋的化学式是什么?最近发现自己的杯子中有黄黄的东西貌似是水垢吧..然后学到酸碱盐溶液着了,书上醋能去水垢..就来问问咯、化学式呢? 化学实验过程中,应注意“三个关注”①关注物质的______;②关注物质的______;③关注物质的变化过程及其_ 加成反应 丙烯与HX(卤化氢)反应 与H2O反应 与X2(卤素反应) 的加聚反应 甲烷与氯气反应 乙烷与氯气二次取代 如何去除杯子的茶垢?一般我去茶垢的话都是用牙刷蘸洗洁精刷,这个办法对于一般的杯子还是可以的.不过对于口相对比较小的水壶或者太空杯之类的不太好用牙刷刷的杯子要是积累了茶垢怎 COS+H2O→H2S+CO2反应吸热还是放热?MoO3+H2S→MoS2+H2O吸热还是放热?反应条件300℃,有催化剂环境下. 明矾的结晶过程中有严重的体积膨胀,请问怎样可以解决这个体积膨胀的问题? 如何有效去除杯子上的茶垢? 为什么离子化合物不存在范德华力?麻烦说的详细些, 美国杜邦漆怎么样? 怎样去除杯子的茶垢我的杯子是不锈钢的,里面有很多的茶垢,请问要怎样才能高效快速彻底的把它清除掉. 某溶液里含,K+,Cu2+,SO42-,Al3+,Cl-则该溶液中的溶质至少有 A,2种 B,3种 C,4种 D,5种 写出理由,与具体的已知选B求解答不要网上的 为什么明矾结晶是化学反应 铝和氯气加热会反应吗点燃可以,但是加热可以吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘