使用COM提供SafeArray数据
在前一篇博文《读取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数据的更多相关文章
- 使用 DB Fixtures 为 Unit Test 提供基础数据,Sails + Mocha 实现。
使用 DB Fixtures 为 Unit Test 提供基础数据,Sails + Mocha 实现. 问题:Test Fixture 太分散,管理麻烦. 在做单元测试的时候,数据回滚是个比较麻烦的问 ...
- 1 week110的zookeeper的安装 + zookeeper提供少量数据的存储
随时查看,zookeeper企业里公认的最新文档版本! https://archive.apache.org/dist/ 下面是在weekend110上的zookeeper的安装 在 ...
- django “如何”系列8:如何为模型提供初始化数据
当你第一次配置一个app的时候,有时候使用硬编码的数据去预填充你的数据库是非常有用的.这里有几个你可以让django自动创建这些数据的方法:你可以提供固定格式的初始化数据或者提供通过SQL初始化数据. ...
- 在WPF对话框中如何验证用户提供的数据
在WPF中,MS在msdn的WPF应用程序开发中对用户输入的数据验证做了示范,基本思想就是添加各种类型的校验规则,比如最大最小值.字符串长度.是否为空等等,在后在界面绑定数据时添加数据字段的校验.这样 ...
- JS对象 神奇的Math对象,提供对数据的数学计算。注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别
Math对象 Math对象,提供对数据的数学计算. 使用 Math 的属性和方法,代码如下: <script type="text/javascript"> var m ...
- 阿里云DataWorks正式推出Stream Studio:为用户提供大数据实时计算的数据中台
5月15日 阿里云DataWorks正式推出Stream Studio,正式为用户提供大数据的实时计算能力,同时标志着DataWorks成为离线.实时双计算领域的数据中台. 据介绍,Stream St ...
- Hadoop平台提供离线数据和Storm平台提供实时数据流
1.准备工作 2.一个Storm集群的基本组件 3.Topologies 4.Stream 5.数据模型(Data Model) 6.一个简单的Topology 7.流分组策略(Stream grou ...
- Gson解析第三方提供Json数据(天气预报,新闻等)
之前都是自己写后台,自己的server提供数据给client. 近期在看第三方的数据接口,訪问其它站点提供的信息.比方.我们可能自己收集的数据相当有限.可是网上提供了非常多关于天气预报.新闻.星座运势 ...
- jquery提供的数据提交方式2-ajax
以前介绍过ajax提交方式.但仅仅是个例子,今天将详细介绍jquery中的$.ajax,$.get,$.post方法. 一,首先介绍$.ajax方法参数(以下参数来自:http://www.cnblo ...
随机推荐
- Linear Regression(线性回归)(二)—正规方程(normal equations)
(整理自AndrewNG的课件,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 在上篇博客中,我们提出了线性回归的概念,给出了一种使代价函数最小的 ...
- Servlet过滤器——使用过滤器禁止浏览器缓存页面
1.概述 IE缓存虽然能提高已储存网站的访问速度,但是过度的IE缓存会影响浏览器的响应速度.同时还可能为网站的运行带来一些不必要的麻烦.例如:可能会因为浏览器缓存的应用,而导致Web服务器不能准确的计 ...
- 使用 Nginx 创建服务器的负载均衡
译序 Nginx 的负载均衡配置看上去很简单.以下是 Nginx 官方给的一个简单的负载均衡的例子: http { upstream myproject { server ...
- [黑马程序员] I/O
---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. IO流概述: Java对数据的 ...
- clear、REFRESH、free区别
clear可以清楚一个工作区或变量.但是如果该内表是带表头的,清空内表时需要在该内表后加[].例如:clear gt_tab[]. free可以清空带表头的内表但是不会清空这个带表头内表的表头,但是也 ...
- MFC 单文档中动态添加菜单项和响应菜单事件
新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_N ...
- HDU 4857 (反向拓扑排序 + 优先队列)
题意:有N个人,M个优先级a,b表示a优先于b.而且每一个人有个编号的优先级.输出顺序. 思路来自:与PKU3687一样 在主要的拓扑排序的基础上又添加了一个要求:编号最小的节点要尽量排在前面:在满足 ...
- Swift - 滑块(UISlider)的用法
1,滑块的创建 1 2 3 4 5 6 var slider=UISlider(frame:CGRectMake(0,0,300,50)) slider.center=self.view.center ...
- windows7 iis安装与配置
方法/步骤 一. Windows 7环境下的安装配置 打开控制面板——程序和功能 点击左侧“打开或关闭Windows功能”,弹出Windows功能 对话框. 在Windows功能对话框中进 ...
- JSTL分割字符 fn:split()
<%@ page language="java" contentType="text/html; charset=UTF-8"%><%@ ta ...