C ++ / CLI com-Interop:将引用类型属性公开给VBA

时间:2012-10-25 10:57:28

标签: c# vba c++-cli com-interop

在对接受VBA引用类型的C#属性进行长时间调查后,我得出结论认为这是不可能的。简而言之,类型为double []甚至是对象的C#属性不能像这样在VBA中使用:

' Compile Error: Function or interface marked as restricted,
' or the function uses an Automation type not supported in Visual Basic
oComExposedEarlyBinding.ObjectArray = VBArray

' Run-time error 424: Object required
oComExposedEarlyBinding.PlainObject = VBArray

或了解更多详情: C# property exposed to VBA (COM) : Run-time error '424': Object required

  

我想知道C ++ / CLI是否支持这样的选项?即   允许将引用类型属性公开给VBA以便a   像上面这样的语法是有效的。

N.B。你可以通过使用后期绑定来实现这一点,但是失去智能感知不是一种选择。

1 个答案:

答案 0 :(得分:0)

这在C ++ / CLI中是可能的,因为C ++ / CLI中的属性由get和set两个函数组成,在C ++ / CLI中,您可以使用引用函数(而不是指针1)。

在C#中以类似方式公开的相同属性将不起作用。

此属性按预期向COM公开,并且不会出现问题设置或进入VBA:

private:
    Object ^_myProp;
public:
property Object %MyProp { 
    virtual Object %get() 
    {
        return *_myProp;
    }
    virtual void set(Object %value) 
    {
        _myProp = %value;
    }
};