描述:
如题
ATL中的代码类似:
//主要是为了传递BYTE数组,仅传入用 库名MyCtrl 对象名MyObj
Make(VARIANT byData)
//VB中调用
Dim a As MYCTRLLib.MyObj
Dim b(2) As Byte
b(0) = 97
b(1) = 98
b(2) = 99
a.Make b
VARIANT难道不是COM接口的支持的标准数据类型么??
解决方案1:
你是不是atl那边做的有问题啊。我以前做过一个例子,传的是long数组,好用:
接口:HRESULT Sum([in]VARIANT varOp1, [out,retval]long* plResult);
实现:
STDMETHODIMP CMath::Sum(VARIANT varOp1, long *plResult)
{
// TODO: Add your implementation code here
if ( !(varOp1.vt & VT_I4) )
return DISP_E_TYPEMISMATCH;
if ( !(varOp1.vt & VT_SAFEARRAY) )
return DISP_E_TYPEMISMATCH;
SAFEARRAY* psa;
if ( varOp1.vt & VT_BYREF)
psa = *(varOp1.pparray);
else
psa = varOp1.parray;
long lLBound,lUBound;
SafeArrayGetLBound( psa, 1, &lLBound );
SafeArrayGetUBound( psa, 1, &lUBound );
long lSum = 0;
for ( long i = lLBound; i <= lUBound; i++)
{
long lValue;
SafeArrayGetElement( psa, &i, &lValue );
lSum += lValue;
}
*plResult = lSum;
return S_OK;
}
--------------------------------------------------
vb中调用:
Set objMath2 = objMath
Dim longArray(1 To 10) As Long
For i = 1 To 10
longArray(i) = i
Next
txtResult = objMath2.Sum(longArray)
-------------------------------------------------
这个例子是atl开发指南上的,我做过,用vc和vb测试都没问题