在前一篇博文《读取SafeArray数据》我们介绍了C#读取安全数组。那么我们的COM怎么编写呢?

1. 定义SAFEARRAY变量

SAFEARRAY *pSArray = NULL;

2. 释放此变量

SafeArrayDestroy(pSArray);

3. 建立向量表

pSArray = SafeArrayCreateVector(VT_UI1, 0, 32);

向量变量(VT_UI1)的定义:MSDN

VT_EMPTY

Variable type is not specified.

VT_NULL

Variable type is NULL.

VT_I2

Variable type is 2-byte signed INT.

VT_I4

Variable type is 4-byte signed INT.

VT_R4

Variable type is 4-byte real.

VT_R8

Variable type is 8-byte real.

VT_CY

Variable type is currency.

VT_DATE

Variable type is date.

VT_BSTR

Variable type is binary string.

VT_DISPATCH

Variable type is IDispatch FAR*.

VT_ERROR

Variable type is SCODE.

VT_BOOL

Variable type is Boolean; True=-1, False=0.

VT_VARIANT

Variable type is VARIANT FAR*.

VT_UNKNOWN

Variable type is IUnknown FAR*.

VT_UI1

Variable type is unsigned char.

VT_RESERVED

This element is reserved.

VT_BYREF

Variable type is a pointer to data.

VT_ARRAY

Variable type is a safe array.

4. 写入数据

SafeArrayPutElement(pSArray, &l, &inqReport[l]);

实例程序(COM方法):

AA:屏蔽的数值

STDMETHODIMP CRepoFmt::getInqRepo(ULONG iStation, SAFEARRAY** ret)
{
SAFEARRAY *pSArray = NULL; unsigned char inqReport[32];
unsigned char xorByte = AA;
int iStationID = 0; if (iStation < 1)
iStationID = 1;
else
iStationID = iStation; inqReport[0] = AA;
inqReport[1] = AA;
inqReport[2] = AA;
inqReport[3] = AA;
inqReport[4] = (iStationID % AA);
inqReport[5] = (iStationID / AA);
inqReport[6] = AA;
inqReport[7] = AA;
inqReport[8] = AA;
inqReport[9] = AA;
inqReport[10] = AA;
inqReport[11] = AA; for (int i = 1; i < 18; i++)
xorByte ^= inqReport[i]; inqReport[18] = xorByte; // Fill the inqReport etc.
for (int j = 12; j < 18; j++)
inqReport[j] = 0;
for (int k = 19; k < 32; k++)
inqReport[k] = 0; if (!ret)
return E_POINTER; if (*ret) {
SafeArrayDestroy(pSArray);
*ret = NULL;
} pSArray = SafeArrayCreateVector(VT_UI1, 0, 32);
for (long l = 0; l < 32; l++)
SafeArrayPutElement(pSArray, &l, &inqReport[l]); *ret = pSArray; return S_OK;
}

使用COM提供SafeArray数据的更多相关文章

  1. 使用 DB Fixtures 为 Unit Test 提供基础数据,Sails + Mocha 实现。

    使用 DB Fixtures 为 Unit Test 提供基础数据,Sails + Mocha 实现. 问题:Test Fixture 太分散,管理麻烦. 在做单元测试的时候,数据回滚是个比较麻烦的问 ...

  2. 1 week110的zookeeper的安装 + zookeeper提供少量数据的存储

    随时查看,zookeeper企业里公认的最新文档版本!       https://archive.apache.org/dist/    下面是在weekend110上的zookeeper的安装 在 ...

  3. django “如何”系列8:如何为模型提供初始化数据

    当你第一次配置一个app的时候,有时候使用硬编码的数据去预填充你的数据库是非常有用的.这里有几个你可以让django自动创建这些数据的方法:你可以提供固定格式的初始化数据或者提供通过SQL初始化数据. ...

  4. 在WPF对话框中如何验证用户提供的数据

    在WPF中,MS在msdn的WPF应用程序开发中对用户输入的数据验证做了示范,基本思想就是添加各种类型的校验规则,比如最大最小值.字符串长度.是否为空等等,在后在界面绑定数据时添加数据字段的校验.这样 ...

  5. JS对象 神奇的Math对象,提供对数据的数学计算。注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别

    Math对象 Math对象,提供对数据的数学计算. 使用 Math 的属性和方法,代码如下: <script type="text/javascript"> var m ...

  6. 阿里云DataWorks正式推出Stream Studio:为用户提供大数据实时计算的数据中台

    5月15日 阿里云DataWorks正式推出Stream Studio,正式为用户提供大数据的实时计算能力,同时标志着DataWorks成为离线.实时双计算领域的数据中台. 据介绍,Stream St ...

  7. Hadoop平台提供离线数据和Storm平台提供实时数据流

    1.准备工作 2.一个Storm集群的基本组件 3.Topologies 4.Stream 5.数据模型(Data Model) 6.一个简单的Topology 7.流分组策略(Stream grou ...

  8. Gson解析第三方提供Json数据(天气预报,新闻等)

    之前都是自己写后台,自己的server提供数据给client. 近期在看第三方的数据接口,訪问其它站点提供的信息.比方.我们可能自己收集的数据相当有限.可是网上提供了非常多关于天气预报.新闻.星座运势 ...

  9. jquery提供的数据提交方式2-ajax

    以前介绍过ajax提交方式.但仅仅是个例子,今天将详细介绍jquery中的$.ajax,$.get,$.post方法. 一,首先介绍$.ajax方法参数(以下参数来自:http://www.cnblo ...

随机推荐

  1. CSS3实现时间轴效果

    原文:CSS3实现时间轴效果 最近打开电脑就能看到极客学院什么新用户vip免费一个月,就进去看看咯,这里就不说它的课程怎么滴了,里面实战路径图页面看到了这个效果: 有点像时间轴的赶脚,而且每一块鼠标悬 ...

  2. 文本框、文本编辑框、按钮——axure线框图部件库介绍

    1. 与文本面板组合设计表单 文本框主要是在设计页面表单的时候,用的最多,通过与文本面板的组合使用,下面我们通过文本面板和文本框设计了一个简单的注册表单 对于,文本框中的文字,只需要双击即可编辑文字 ...

  3. phpcms 列表页中,如何调用其下的所有子栏目(或特定的子栏目)?

    {pc:get sql="select * from phpcms_category where catid in(你的子栏目ID)" return="data" ...

  4. smartforms客制页格式

    smartforms需要打印非A4纸时需要手动创建页格式:创建事务代码:spad, 操作的时候需要 把所有步骤都做一遍方可正常打印,不然只能停留在预览界面无法打印.

  5. 进阶:案例五: Dynamic 创建 Business Graphic

    效果图: step: 无需节点无需UI 1.添加属性 2.代码: method WDDOMODIFYVIEW . DATA:lr_graph TYPE REF TO cl_wd_business_gr ...

  6. 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI

    原文:[ASP.NET Web API教程]2.3.5 用Knockout.js创建动态UI 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容 ...

  7. 开始翻译Windows Phone 8 Development for Absolute Beginners教程

    Bob Tabor (LearnVisualStudio.NET)和Clint Rutkas (Microsoft/Channel9)合作推出了超过11小时的针对初学者的Windows Phone 8 ...

  8. windows查看某个端口被谁占用

    XAMPP Error: Apache shutdown unexpectedly. 解决思路 我建议首先 运行在cmd中运行 (安装目录)apache/bin/httpd.exe 无法启动apach ...

  9. STL algorithm算法lower_bound和upper_bound(31)

    lower_bound原型: function template <algorithm> std::lower_bound default (1) template <class F ...

  10. MFC--自定义消息

    在windows程序中,消息是一个重要的概念,最常见的消息一般都是以WM_开头,WM就是window message,窗口消息的缩写,通过处理标准的windows消息,我们可以改变窗口的外观,如使用W ...