C++/CLI com-Interop: предоставление свойства ссылочного типа для VBA

После долгих часов изучения раскрытия свойства C#, которое принимает ссылочный тип, в VBA, я пришел к выводу, что это невозможно. Вкратце, свойство C# типа double[] или даже объект нельзя использовать в 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# свойство, доступное для VBA (COM): ошибка времени выполнения «424»: требуется объект

Я хотел бы знать, поддерживает ли C++/CLI такую ​​возможность? т. е. разрешить доступ к свойству ссылочного типа для VBA, чтобы синтаксис, подобный приведенному выше, был допустимым.

Н.Б. Вы можете добиться этого, используя позднее связывание, но потеря IntelliSense не вариант.


person Adam    schedule 25.10.2012    source источник


Ответы (1)


Это возможно в 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;
    }
};
person Adam    schedule 21.11.2012