在COM中使用变体 [英] Using Variant in COM

查看:64
本文介绍了在COM中使用变体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我正在尝试将VARIANT类型传递给COM方法.我基本上是用它来从COM方法读取整数数组.不幸的是,我像地狱一样被困住了:(

在发送变量之前,将COM初始化为INT数组:

Hi,

I am trying to pass a VARIANT type to a COM method. I am basically using this to read an array of integer from the COM method. Unfortunately, I am stuck like hell :(

Before sending the variable, COM is initialized to an array of INT :

VARIANT *variantVariable = new VARIANT;
 ::VariantInit(variantVariable);
 variantVariable->vt     = VT_ARRAY | VT_INT;
 SAFEARRAYBOUND bounds[1];
 bounds[0].cElements = 100; // array size
 bounds[0].lLbound = 0;
 SAFEARRAY *pSafeArray = SafeArrayCreate(VT_INT,1,bounds);
 // pointer to access the data
 int *pData;
 SafeArrayAccessData(pSafeArray,reinterpret_cast<void **>(&pData));
for(Uint offset = 0; 100 > offset; ++offset)
{
   pData[offset] = -1;
}

SafeArrayUnaccessData(pSafeArray);
variantVariable->parray = pSafeArray;


我正在打电话给COM:


I am calling the COM :

interfaceVariable->COMFUNCTION(
    variantVariable


);

跟踪COM函数时,我看到variantVariable为空.但是,在调用它之前,它将是一个int数组.我不确定出了什么问题.请帮忙.


);

On tracing the COM function, I see that variantVariable is empty. How-ever, just before calling it, it would be an array of int. I am not sure what is going wrong. Please help.

推荐答案

在大多数情况下,应使用_variant_t而不是VARIANT.干净得多.您也可以使用SafeArrayGetElement.那应该可以...
Most of the time, you should use _variant_t instead of VARIANT. It''s much cleaner. You also might use SafeArrayGetElement. That should work...


这篇关于在COM中使用变体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆