在前一篇博文《读取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. Linux 安装Redis全过程日志

    wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make ...

  2. UVA 10911 Forming Quiz Teams(dp + 集合最优配对问题)

    4th IIUC Inter-University Programming Contest, 2005 G Forming Quiz Teams Input: standard input Outpu ...

  3. boost::thread类

    前言 标准C++线程即将到来.预言它将衍生自Boost线程库,现在让我们探索一下Boost线程库. 几年前,用多线程执行程序还是一件非比寻常的事.然而今天互联网应用服务程序普遍使用多线程来提高与多客户 ...

  4. javascript中apply和eval结合的强大用法

        eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码  如下例子 <a class="cl ...

  5. spring mvc controller json数据

    项目中遇到个批处理,需要前台传递一个json格式对象数组,如下:var data={   "wos":[{"id":1,"satisfaction&q ...

  6. unity 调用android函数

    unity 调用android函数 分类: unity2013-12-19 17:54 475人阅读 评论(0) 收藏 举报 unityandroidjar 我们知道,安卓project都有一个And ...

  7. VC++实现位图显示透明效果--实现原理

    我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示 ...

  8. 用MFC实现WebGUI--(CDHtmlDialog)

    自从去年年底一次棘手的界面,开始研究用web做界面到现在大约1年,这一年间不是局限在实现层面,也并非一直研究这一个问题,有很多问题其实不是问题,只是自己没有想清楚或者思想没放开.对于一个界面开发人员, ...

  9. Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)

    原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(二) 4.3 表达式用户搜索,只会输入一个或几个词,也可能是一句话.输入的语句是如何变成搜索条件的上一篇已经略有提及. 4.3.1 观察 ...

  10. 微微信.NET:开源的ASP.NET微信公众号应用平台

    题记: 平时喜欢使用 C# 编程.近半年玩微信公众平台,看到一些微信的应用系统大多是PHP.Python的,于是就有想法做一套开放的 C# ASP.NET的微信应用系统. 微微信.NET  基于ASP ...