当前位置: 首页 > 图文教程 > 网络编程 > ASP > 在VB中使用API函数(Any)

ASP
ASP调用ORACLE存储过程并返回结果集
用ASP实现网页BBS
关于Global.asa文件的深入研究与session变量失效提示的具体方法
简易ASP+注册系统
防护手册:如何防止ASP木马在服务器上运行
用Visual Basic实现多画面播放功能之二
如何增强ASP程序性能(1)
如何增强ASP程序性能(2)
如何增强ASP程序性能(3)
ASP备份数据库
二十八条改善 ASP 性能和外观的技巧
在Form域中Post大于100K的数据
如何使用ASP制作模似动态生长的表单?
Microsoft IIS 真的如此「不安全」吗?(1)
Microsoft IIS 真的如此「不安全」吗?(2)
Microsoft IIS 真的如此「不安全」吗?(3)
Microsoft IIS 真的如此「不安全」吗?(4)
Microsoft IIS 真的如此「不安全」吗?(5)
关于页面和代码分离
ServerVariables 对路径的操作

ASP 中的 在VB中使用API函数(Any)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 60 ::
收藏到网摘: n/a

       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型数