在COM中使用变体 [英] Using Variant in COM
本文介绍了在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屋!
查看全文