Как я использую класс.NET в VBA? Справка синтаксиса!

хорошо у меня есть несколько классов.NET, которые я хочу использовать в VBA. Таким образом, я должен зарегистрировать их через COM и все это. Я думаю, что мне выяснили регистрацию COM (наконец), но теперь я нуждаюсь в помощи с синтаксисом того, как создать объекты. Вот некоторый псевдо код, показывающий, что я пытаюсь сделать.

Править: Измененные Приложенные Объекты возвратить ArrayList вместо Списка

Классы.NET похожи на это...

public class ResourceManagment
{
    public ResourceManagment()
    {
        // Default Constructor
    }

    public static List<RandomObject> AttachedObjects()
    {
        ArrayList list = new ArrayList();
        return list;
    }
}

public class RandomObject
{
    // 
    public RandomObject(int someParam)
    {

    }

}

Хорошо, таким образом, это - то, что я хотел бы сделать в VBA (продемонстрированный в C#), но я не знаю как...

public class VBAClass
{
    public void main()
    {
        ArrayList myList = ResourceManagment.AttachedObjects();
        foreach(RandomObject x in myList)
        {
            // Do something with RandomObject x like list them in a Combobox
        }
    }
}

Одна вещь отметить состоит в том, что RandomObject не имеет общедоступного конструктора по умолчанию. Таким образом, я не могу создать экземпляр его как Dim x As New RandomObject. MSDN заявляет, что Вы не можете инстанцировать объекта, который не имеет конструктора по умолчанию через COM, но можно все еще использовать тип объекта, если она возвращается другим методом... Types must have a public default constructor to be instantiated through COM. Managed, public types are visible to COM. However, without a public default constructor (a constructor without arguments), COM clients cannot create an instance of the type. COM clients can still use the type if the type is instantiated in another way and the instance is returned to the COM client. You may include overloaded constructors that accept varying arguments for these types. However, constructors that accept arguments may only be called from managed (.NET) code.

Добавленный: Вот моя попытка в VB:

Dim count As Integer
count = 0
Dim myObj As New ResourceManagment
For Each RandomObject In myObj.AttachedObjects
    count = count + 1
Next RandomObject
6
задан PICyourBrain 1 April 2010 в 13:27
поделиться

2 ответа

Ваша проблема в том, что метод AttachedObjects () является статическим. COM не может использовать статические методы. В COM единственная «статическая» операция, которую вы можете выполнить, - это «создать экземпляр класса».

Следовательно, чтобы вызвать метод AttachedObjects из VBA, просто сделайте его нестатическим (т.е. удалите ключевое слово static в его определении). В остальном метод может оставаться таким, как сейчас. И ваш код VBA тоже кажется нормальным - должен работать после того, как вы измените метод.

И на случай, если это не сработает, следующий вопрос: какая именно ошибка вы получаете и в какой момент?

1
ответ дан 17 December 2019 в 20:30
поделиться

чтобы обойти это, вам нужно создать RandomObjectFactory в вашем коде .net и создать RandomObject для использования в VBA

, что-то вроде этого:

public class RandomObjectFactory
{
     public static Create(int someParam)
     {
          return new RandomObject(someParam);
     } 
}

вы можете расширить этот класс, чтобы иметь больше перегрузок методов создания для создания различных перегрузок RandomObjects

ОБНОВЛЕНИЕ:

на основе правильного понимания question этот вопрос и этот , вероятно, будет полезен

1
ответ дан 17 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: