2015-09-27 1 views
1

Можно ли ссылаться на COM-зарегистрированную DLL, а затем создавать объекты, требующие аргументов в конструкторе в коде VBA?VBA, импортирующий COM-зарегистрированную DLL и вызывающий конструктор с аргументами

Я успешно ссылаюсь на tlb в Access 2013 (64-разрядный), который был зарегистрирован regasm, и мне удалось создать простой объект, который не нуждается в аргументах в конструкторе.

Из того, что я читал, это не так. Я теперь сталкиваюсь с крупным рефакторингом?

+0

Вы конкретно * нужны * для управления объектами в VBA? Я спрашиваю, потому что TLB могут быть кошмаром, когда речь идет о версиях и обновлениях, и я лично избегаю их любой ценой при разработке надстроек Office. Вместо этого я создаю методы в .NET, доступные из вызовов VBA, и оставляю все манипуляции с объектами внутри .NET с помощью метода, чтобы делать все, что мне нужно. Это означает, что мне не нужно использовать regasm, но можно динамически вызывать методы, не набирая их. Пинг меня, если ты хочешь обсудить это дальше. – stuzor

ответ

2

Это не должно быть «основным». Вам просто нужен фабричный метод, который требует всех аргументов, необходимых для построения объекта. Например:

public class Foo { 
    internal Foo(int arg1, string arg2) { 
     // etc... 
    } 
    // Other methods and properties 
    //... 
} 

public class FooFactory { 
    public Foo Create(int arg1, string arg2) { 
     return new Foo(arg1, arg2); 
    } 
} 

И теперь вы просто используете FooFactory.Create() в коде VBA.

Смежные вопросы