2016-01-18 2 views
0

У меня есть веб-сервис, созданный на C# (WCF), который использует COM-объект, сделанный в Visual Basic 6.0. Я следил за this way, чтобы использовать COM-объект и использовать функцию, которую я хочу. Большая проблема заключается в том, что визуальный базовый DLL постоянно меняется (потому что его разработка и адаптация к клиенту) и CLSID постоянно меняются.Как слить новые COM-объекты из C#

Это код. Прост, я просто передаю COM и отправлю на печать все страницы:

Printer print = new Printer(); //Where I Cast the COM Library 
print.AllPages = 1; //its a parameter but i edited it so you can understand 
return print.PrintPdf(); 

Как я могу сделать этот код пригодным для изменения? Есть ли способ изменить мой код, поэтому мне не нужно удалять ссылку, повторно добавлять ее и перестраивать proyect?

Благодаря

ответ

1

Если COM-объект поддерживает позднее связывание (что, если я правильно помню, каждый VB6 COM-объект должен поддерживать по умолчанию), вы можете создать объект, не зная CLSID во время компиляции с помощью Activator.CreateInstance :

dynamic printer = Activator.CreateInstance(Type.GetTypeFromProgID("SisPrinter.Printer")); 

printer.AllPages = 1; 

printer.PrintfPdf(); 

позднее связывание является более медленным, чем раннее связывание (с помощью добавления ссылки в Visual Studio), но даже позволяет вызывать методы, которые были введены в более поздней версии этого COM-объекта. Основная цель - включить поддержку языков сценариев.

Вместо кодирования с использованием импортированных интерфейсов вы должны использовать динамический , который доступен с C# 4.0. Что касается программной архитектуры, этот подход не так хорош, как добавление статической ссылки, но может помочь вам до тех пор, пока ваши интерфейсы не будут стабильными.

+0

Спасибо, я сделал что-то подобное, и это сработало! Я не знал Activator – Okengroth

+0

Sory для двойной почты, но метод «CreateInstance», поиск в каждой папке в реестре? или просто LocalMachine? – Okengroth

+1

Он должен выглядеть первым в HKEY_CURRENT_USER, если COM-Object был зарегистрирован в контексте текущего пользователя, и если он не будет выполнен, он будет выглядеть в HKEY_LOCAL_MACHINE. –

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