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

ASP
一个ASP版的图片浏览管理器
无组件上传图片至SQLSERVER数据库
利用Jmail.Message发送邮件
用Web页面执行客户端程序
多图片上传到指定的目录并存到数据库
dreamweaverMX通用分页代码研究
下拉菜单输入,根据输入内容自动定位
中文的无组件文件上传ASP函数
一个利用adsi得到局域网信息的asp文件
根据需要动态include不同的文件
让自定义文件下载支持断点续传
用数组实现数据记录的批量录入方法
上传的进度条 实时反映上传情况
用ASP动态生成javascript的表单验证代码
ASP 编程中20个非常有用的例子
ASP生成Word文档的又一方法
用asp解析图片地址,并将其保存。
利用ASP的文件操作实现用户管理
创建 Visual Basic COM 组件在 ASP 中使用
调试 ASP 中使用的 Visual Basic COM 组件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 98 ::
收藏到网摘: 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型数