首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否读取和显示变体VT_ARRAY | VT_BSTR中的数据?

是否读取和显示变体VT_ARRAY | VT_BSTR中的数据?
EN

Stack Overflow用户
提问于 2013-10-22 23:49:49
回答 1查看 9.5K关注 0票数 0

我想使用具有COM对象接口的仪器。不幸的是,SDK中没有C++示例,只有C#。

在创建包装器类之后,我可以成功地将仪器的序列号读取到一个变量中:

代码语言:javascript
复制
 VARIANT snumbers;
 PowerMeter=new TCoLMMeasurement(Form1);
 PowerMeter->ScanUSB(&snumbers);

但是,我无法从具有(VT_ARRAY | VT_BSTR)类型的变体中正确地获取序列号。我阅读了该类型的文档,以下是我尝试过的内容和得到的结果:

代码语言:javascript
复制
info("type of data: " + AnsiString(snumbers.vt));
info("VT_ARRAY|VT_BSTR = " + AnsiString(VT_ARRAY |VT_BSTR));
info("Size of an element(bytes): " + AnsiString(snumbers.parray->cbElements));
info("Number of dimensions: " + AnsiString(snumbers.parray->cDims));
info("Size of dimension 0: " + AnsiString(snumbers.parray->rgsabound[0].cElements));
info("value of pVdata[0]: " + AnsiString(((long*)(snumbers.parray->pvData))[0]));
info(((long*)snumbers.bstrVal)[0]);

SAFEARRAY* pSafeArray=NULL;
pSafeArray=V_ARRAY(&snumbers);
long element=0;
long i=0;
SafeArrayGetElement(pSafeArray,&i,(void*)&element);
info(element);

上面的代码显示了这些结果:

代码语言:javascript
复制
type of data: 8200
VT_ARRAY|VT_BSTR = 8200
Size of an element(bytes): 4
Number of dimensions: 1
Size of dimension 0: 1
value of pVdata[0]: 1591532
25165825
1592716

序列号应为700187。

我在使用CodeGear RAD C++ Builder2007创建的VCL窗体应用程序中进行了测试

感谢您的任何帮助!

加兹顿

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-24 16:39:41

使用BSTR转换解决了这个问题。我没有意识到BSTR类型的复杂性。

代码语言:javascript
复制
info("value of pVdata[0]: " + AnsiString(((BSTR*)(snumbers.parray->pvData))[0]));

代码语言:javascript
复制
SAFEARRAY* pSafeArray=NULL;
pSafeArray=V_ARRAY(&snumbers);
BSTR element;
long i=0;
SafeArrayGetElement(pSafeArray,&i,(void*)&element);
info("value of element0: " + AnsiString(element));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19522594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档