关于数组的API函数的含义

贝隆 2009-05-25 12:30:27
本人想够深的学习一下数组,查询了相关的API函数,具体如下:
但是都没有更多的说明,有谁能帮我说说他们的含义和用法?拜谢!
Public Declare Sub SafeArrayAccessData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ppvData As Any)
Public Declare Sub SafeArrayAllocData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayAllocDescriptor Lib "oleaut32.dll" (ByVal cDims As Long, ByRef ppsaOut As SAFEARRAY)
Public Declare Sub SafeArrayAllocDescriptorEx Lib "oleaut32.dll" (ByVal vtas integer, ByVal cDims As Long, ByRef ppsaOut As SAFEARRAY)
Public Declare Sub SafeArrayCopy Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef ppsaOut As SAFEARRAY)
Public Declare Sub SafeArrayCopyData Lib "oleaut32.dll" (ByRef psaSource As SAFEARRAY, ByRef psaTarget As SAFEARRAY)
Public Declare Function SafeArrayCreate Lib "oleaut32.dll" (ByVal vtas integer, ByVal cDims As Long, ByRef rgsabound As SAFEARRAYBOUND) As Long
Public Declare Function SafeArrayCreateEx Lib "oleaut32.dll" (ByVal vtas integer, ByVal cDims As Long, ByRef rgsabound As SAFEARRAYBOUND, pvExtra As Any) As Long
Public Declare Function SafeArrayCreateVector Lib "oleaut32.dll" (ByVal vtas integer, ByVal lLbound As Long, ByVal cElements As Long) As Long
Public Declare Function SafeArrayCreateVectorEx Lib "oleaut32.dll" (ByVal vtas integer, ByVal lLbound As Long, ByVal cElements As Long, pvExtra As Any) As Long
Public Declare Sub SafeArrayDestroy Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayDestroyData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayDestroyDescriptor Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef psa As SAFEARRAY) As Long
Public Declare Sub SafeArrayGetElement Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef rgIndices As Long, pv As Any)
Public Declare Function SafeArrayGetElemsize Lib "oleaut32.dll" (ByRef psa As SAFEARRAY) As Long
Public Declare Sub SafeArrayGetIID Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef pguid As GUID)
Public Declare Sub SafeArrayGetLBound Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByVal nDim As Long, ByRef plLbound As Long)
Public Declare Sub SafeArrayGetRecordInfo Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef prinfo As Long)
Public Declare Sub SafeArrayGetUBound Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByVal nDim As Long, ByRef plUbound As Long)
Public Declare Sub SafeArrayGetVartype Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef pvtas integer)
Public Declare Sub SafeArrayLock Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayPtrOfIndex Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef rgIndices As Long, ppvData As Any)
Public Declare Sub SafeArrayPutElement Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef rgIndices As Long, pv As Any)
Public Declare Sub SafeArrayRedim Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef psaboundNew As SAFEARRAYBOUND)
Public Declare Sub SafeArraySetIID Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByVal guid As Long)
Public Declare Sub SafeArraySetRecordInfo Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef prinfo As Long)
Public Declare Sub SafeArrayUnaccessData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayUnlock Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
...全文
322 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2009-05-26
  • 打赏
  • 举报
回复
学习~~~~~

Mark....
PctGL 2009-05-26
  • 打赏
  • 举报
回复

hoho,特来感谢高手夸我这个小菜鸟...
贝隆 2009-05-26
  • 打赏
  • 举报
回复
承蒙夸奖,楼上的仁兄才是高手,拜你赐教,我解决了API串口通讯的问题,真是万分感谢啊!
lyserver 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 PctGL 的回复:]
Public Declare Sub SafeArrayAccessData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ppvData As Any)
获取数组元素数据起始地址,第1个参数应该声明成 byval,以下大多数也是如此
psa 的参数含义是数组的注册地址
每次想要操作数组元素之前都应该先用此函数获取数据地址,

Public Declare Sub SafeArrayAllocData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayAllocDescriptor Lib…
[/Quote]
楼主和PctGL都很厉害啊,知道这么多API,学习!
贝隆 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 PctGL 的回复:]
......
我最实在了/////...........
安全数组的这些api我很早就研究过了,正好这两天因为项目应用,整理了一些调用,封装了几个函数和几个宏,实现我最常用的1维可变类型的使用,遇到lz问这个问题,100分太馋了,想蹭蹭
[/Quote]
你放心,分会给你的:)
m60a1 2009-05-25
  • 打赏
  • 举报
回复
LZ,,看到您的话,我忽然想到了,前些时候有个人跟你发出了差不多的宣言:我想更深刻的学习一下winsock

OK,于是他提问:我从现在开始不再用MS的标准winsock控件,由纯API来完成.

我对他的提议是:如果你真想这么干,那么你必须先深刻的理解一下什么是winsock?winsock是用来干嘛的

MS-winsock中的所有特性你是否已经完全掌握?TCP是什么东西?UDP是什么东西?他们俩在网络世界中充当

着什么样的角色?现在有几种通用的标准协议?这些协议中,又有多少已经在应用层被很好的实施了?



总之一点,,,,,基础很重要!!!!当对某块的技术很感兴趣时,基础,基础很重要!
贝隆 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 SYSSZ 的回复:]
想够深的学习一下数组,弄那么多API干什么?那么到底想学什么?
想学API---网上到处是API用法的文章;
想学数组---MSDN上有.
[/Quote]
说说得是这位,不是你laviewpbt哈
贝隆 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 Veron_04 的帖子:]
本人想够深的学习一下数组,查询了相关的API函数,具体如下:
但是都没有更多的说明,有谁能帮我说说他们的含义和用法?拜谢!
Public Declare Sub SafeArrayAccessData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ppvData As Any)
Public Declare Sub SafeArrayAllocData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayAllocDescriptor Lib "oleaut32.dll" (ByVal cDims As Long, ByRef…
[/Quote]

你说的哪本书应该是:VB高级编程吧,比较深奥!
看了一下它关于数组方面的说明,VB的数组定义内部是一个结构,比较高深,所以我想更深层次的了解一下。

至于楼山的仁兄,我只想说谢谢你的回复了,你没有明白我的意思唉!
laviewpbt 2009-05-25
  • 打赏
  • 举报
回复
楼上的不能这样讲,楼主所列出的函数实际上都是在后台帮我们实现在VB中数组一些常用功能的功臣。
SYSSZ 2009-05-25
  • 打赏
  • 举报
回复
想够深的学习一下数组,弄那么多API干什么?那么到底想学什么?
想学API---网上到处是API用法的文章;
想学数组---MSDN上有.
laviewpbt 2009-05-25
  • 打赏
  • 举报
回复
VB中的数组都是安全数组,关于安全数组你多看看网络上的VB真想不到系列文章。

不过还有一本国外人写得比较高深的书里对这个也有专门的讲解,不记得啥名字了。

PctGL 2009-05-25
  • 打赏
  • 举报
回复
......
我最实在了/////...........
安全数组的这些api我很早就研究过了,正好这两天因为项目应用,整理了一些调用,封装了几个函数和几个宏,实现我最常用的1维可变类型的使用,遇到lz问这个问题,100分太馋了,想蹭蹭
slowgrace 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Veron_04 的回复:]
引用 6 楼 m60a1 的回复:
LZ,,看到您的话,我忽然想到了,前些时候有个人跟你发出了差不多的宣言:我想更深刻的学习一下winsock

OK,于是他提问:我从现在开始不再用MS的标准winsock控件,由纯API来完成.

我对他的提议是:如果你真想这么干,那么你必须先深刻的理解一下什么是winsock?winsock是用来干嘛的

MS-winsock中的所有特性你是否已经完全掌握?TCP是什么东西?UDP是什么东西?他们俩在网络世界中充当

着什么样的角色…
[/Quote]

lapview说的是这个吧:http://blog.csdn.net/AdamBear/archive/2002/03/18/13702.aspx
slowgrace 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 PctGL 的回复:]
Public Declare Sub SafeArrayAccessData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ppvData As Any)
获取数组元素数据起始地址,第1个参数应该声明成 byval,以下大多数也是如此
psa 的参数含义是数组的注册地址
每次想要操作数组元素之前都应该先用此函数获取数据地址,

Public Declare Sub SafeArrayAllocData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayAllocDescriptor Lib…
[/Quote]

你真实在
贝隆 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 m60a1 的回复:]
LZ,,看到您的话,我忽然想到了,前些时候有个人跟你发出了差不多的宣言:我想更深刻的学习一下winsock

OK,于是他提问:我从现在开始不再用MS的标准winsock控件,由纯API来完成.

我对他的提议是:如果你真想这么干,那么你必须先深刻的理解一下什么是winsock?winsock是用来干嘛的

MS-winsock中的所有特性你是否已经完全掌握?TCP是什么东西?UDP是什么东西?他们俩在网络世界中充当

着什么样的角色?现在有几种通用的标准协议…
[/Quote]
呵呵,问题基础从何而来?不就是从这些地方来?从了解底层来?
PctGL 2009-05-25
  • 打赏
  • 举报
回复
Public Declare Sub SafeArrayAccessData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ppvData As Any)
获取数组元素数据起始地址,第1个参数应该声明成 byval,以下大多数也是如此
psa 的参数含义是数组的注册地址
每次想要操作数组元素之前都应该先用此函数获取数据地址,

Public Declare Sub SafeArrayAllocData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayAllocDescriptor Lib "oleaut32.dll" (ByVal cDims As Long, ByRef ppsaOut As SAFEARRAY)
Public Declare Sub SafeArrayAllocDescriptorEx Lib "oleaut32.dll" (ByVal vtas integer, ByVal cDims As Long, ByRef ppsaOut As SAFEARRAY)
以上这几个好像是,申请空数组然后由用户自己设置数据的方法

Public Declare Sub SafeArrayCopy Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef ppsaOut As SAFEARRAY)
Public Declare Sub SafeArrayCopyData Lib "oleaut32.dll" (ByRef psaSource As SAFEARRAY, ByRef psaTarget As SAFEARRAY)
复制数组

Public Declare Function SafeArrayCreate Lib "oleaut32.dll" (ByVal vtas integer, ByVal cDims As Long, ByRef rgsabound As SAFEARRAYBOUND) As Long
Public Declare Function SafeArrayCreateEx Lib "oleaut32.dll" (ByVal vtas integer, ByVal cDims As Long, ByRef rgsabound As SAFEARRAYBOUND, pvExtra As Any) As Long
Public Declare Function SafeArrayCreateVector Lib "oleaut32.dll" (ByVal vtas integer, ByVal lLbound As Long, ByVal cElements As Long) As Long
Public Declare Function SafeArrayCreateVectorEx Lib "oleaut32.dll" (ByVal vtas integer, ByVal lLbound As Long, ByVal cElements As Long, pvExtra As Any) As Long
创建数组,其中一些包括创建1维数组,创建自定义类型数组,和其他扩展数据类型的数组方法


Public Declare Sub SafeArrayDestroy Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayDestroyData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayDestroyDescriptor Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
销毁数组,销毁数据,销毁描述信息

Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef psa As SAFEARRAY) As Long
获取维数
Public Declare Sub SafeArrayGetElement Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef rgIndices As Long, pv As Any)
获取元素个数
Public Declare Function SafeArrayGetElemsize Lib "oleaut32.dll" (ByRef psa As SAFEARRAY) As Long
元素长度
Public Declare Sub SafeArrayGetIID Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef pguid As GUID)
这个和对象类型元素有关

Public Declare Sub SafeArrayGetLBound Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByVal nDim As Long, ByRef plLbound As Long)
下标
Public Declare Sub SafeArrayGetRecordInfo Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef prinfo As Long)
获取自定义类型的元素信息

Public Declare Sub SafeArrayGetUBound Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByVal nDim As Long, ByRef plUbound As Long)
获取上标

Public Declare Sub SafeArrayGetVartype Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef pvtas integer)
获取数组的元素数据类型

Public Declare Sub SafeArrayLock Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayPtrOfIndex Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef rgIndices As Long, ppvData As Any)
获取指定元素的地址
Public Declare Sub SafeArrayPutElement Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef rgIndices As Long, pv As Any)

Public Declare Sub SafeArrayRedim Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef psaboundNew As SAFEARRAYBOUND)
调整数组元素内容

Public Declare Sub SafeArraySetIID Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByVal guid As Long)
Public Declare Sub SafeArraySetRecordInfo Lib "oleaut32.dll" (ByRef psa As SAFEARRAY, ByRef prinfo As Long)
Public Declare Sub SafeArrayUnaccessData Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)
Public Declare Sub SafeArrayUnlock Lib "oleaut32.dll" (ByRef psa As SAFEARRAY)

有一些东西的用途不是很大,就没说,特别是针对 recordinfo 的,如果想单独通过api方式使用,很麻烦
SYSSZ 2009-05-25
  • 打赏
  • 举报
回复
没注意看贴,失言了,莫怪

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧