首页 > 代码库 > 使用COM提供SafeArray数据
使用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数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。