2012-10-25 92 views
0

經過長時間的調查,將接受引用類型的C#屬性暴露給VBA,我斷定這是不可能的。簡單地說,就是double類型[],甚至物體不能在VBA這樣消耗的C#屬性:C++/CLI com-Interop:將引用類型屬性暴露給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,以便類似上述的語法是有效的。

N.B.您可以通過使用延遲綁定來實現此目的,但是失去智能感知不是一種選擇。

回答

0

這在C++/CLI中是可行的,因爲C++/CLI中的屬性由兩個函數get和set組成,在C++/CLI中可以有一個引用函數(與指針相對)。

在C#中以相似方式公開的相同屬性不起作用。

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

像預期的那樣COM和不會有問題的設置或VBA獲取此屬性暴露