选择显示字体大小

使用safearray传送对象


  使用safearray

  我们将使用safearray来通过com传送串行化的对象。这部分将介绍如何建立和使用safearray类型。

  safearray是数据结构的一种。这种结构也没有什么特别的,你只需要正确地设置它,当然你要知道其中一些颇为复杂的规定。为了确保safearray被正确地使用,它有一系列用作管理的api函数。这些api的函数负责创建、调整大小和删除safearray。不幸的是,有关这些api函数的文档是相当少的。

  对于safearray的内部结构我们并不关心,但了解一下是值得的。以下就是safearray的win32定义:

  typedef struct tagsafearray

   {

    unsigned short cdims;

    unsigned short ffeatures;

    unsigned long cbelements;

    unsigned long clocks;

    void * pvdata;

    safearraybound rgsabound[ 1 ];

   } safearray;

  这个结构的成员(cdims,clocks等)是通过api函数来设置和管理的。真正的数据存放在pvdata成员中,而safearraybound结构定义该数组结构的细节。以下就是该结构成员的简要描述:


成员描述
cdims数组的维数
ffeatures用来描述数组如何分配和如何被释放的标志
cbelements数组元素的大小
clocks一个计数器,用来跟踪该数组被锁定的次数
pvdata 指向数据缓冲的指针
rgsabound描述数组每维的数组结构,该数组的大小是可变的

  rgsabound是一个有趣的成员,它的结构不太直观。它是数据范围的数组。该数组的大小依safe array维数的不同而有所区别。rgsabound成员是一个safearraybound结构的数组--每个元素代表safearray的一个维。

  typedef struct tagsafearraybound

   {

    unsigned long celements;

    unsigned long llbound;

   } safearraybound;

  维数被定义在cdims成员中。例如,一个'c'类数组的维数可以是[3][4][5]-一个三维的数组。如果我们使用一个safearray来表示这个结构,我们定义一个有三个元素的rgsabound数组--一个代表一维。

  cdims = 3;


    ...


  safearraybound rgsabound[ 3 ];

  rgsabound[0]元素定义第一维。在这个例子中ilbound元素为0,是数组的下界。celements成员的值等于三。数组的第二维([4])可以被rgsabound结构的第二个元素定义。下界也可以是0,元素的个数是4,第三维也是这样。要注意,由于这是一个"c"数组,因此由0开始,对于其它语言,例如visual basic,或者使用一个不同的开始。该数组的详细情况如下所示:


元素celementsilbound
rgsabound[0] 3 0
rgsabound[1]4 0
rgsabound[2]50


  关于safearraybound结构其实还有很多没说的。我们将要使用的safearray只是一个简单的单维字节数组。我们通过api函数创建数组的时候,safearraybound将会被自动设置。只有在你需要使用复杂的多维数组的时候,你才需要操作这个结构。

  还有一个名字为clocks的成员变量。很明显,它与时间没有任何的关系--它是一个锁的计数器。该参数是用来控制访问数组数据的。在你访问它之前,你必须锁定数据。通过跟踪该计数器,系统可以在不需要该数组时安全地删除它。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons