描述:
事件声明
[id(3), helpstring("method Test2")] HRESULT Test2([out]VARIANT *Data);
我在其中传递了一个二进制数组。一个buff
这样,在VB中就有这样的一个响应事件
XX_onTest2(Data As Variant)
在这个响应当中,我调用了一个vb中的控件的方法,该方法的参数也是Data As Variant
但他却报错Varialble uses an Automation type not supported in Visual Basic
自己分析认为,控件需要的参数类型和我的atl控件参数类型不是匹配的。
而事实上,至少字面上是一样的。(是否有内容上的区别?)
另问,我在VB中如何访问这个Data?(比如传其它类型。字符串)
我对VB知之甚少,请写过atl控件的高手帮我解释一样。
解决方案1:
//Fire_XXX
VARIANT param;
VariantInit(¶m);
V_VT(¶m) = VT_ARRAY|VT_UI1;
V_VARIANTREF(¶m) = ppsa;
VariantClear(&varResult);
pvars[0] = param;
DISPPARAMS disp = { pvars, NULL, 1, 0 };
pDispatch->Invoke(0x3, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
//call Fire_XXX
...
CComVariant var;
VariantInit(&var);
hr = Fire_XXX(&var);
...
我是专程过来帮你顶贴的
解决方案3:这位老兄问题解决了没有?哈哈!我来帮帮你!
解决方案4: http://support.microsoft.com/kb/q167668/
How To Pass a SafeArray of Strings in a VARIANT with vb and vc