0

在对将接受引用类型的 C# 属性公开给 VBA 进行长时间的调查后,我得出结论认为这是不可能的。简而言之,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

或了解更多详细信息: 暴露给 VBA (COM) 的 C# 属性:运行时错误“424”:需要对象

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

注意您可以通过使用后期绑定来实现这一点,但不能选择失去智能感知。

4

1 回答 1

0

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

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

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

private:
    Object ^_myProp;
public:
property Object %MyProp { 
    virtual Object %get() 
    {
        return *_myProp;
    }
    virtual void set(Object %value) 
    {
        _myProp = %value;
    }
};
于 2012-11-21T15:54:48.270 回答