Ссылка на существующий экземпляр COMVisible объекта
У меня есть два проекта.NET, и я хотел бы создать двустороннюю связь между ними. ProjectA - это общая надстройка, которая создает ленту в приложении MS Office. ProjectB - это приложение WinForms, которое собирает / отправляет информацию с / на сервер.
Я создал интерфейс, IAddInCommunication
, который определяет методы, которые я хочу вызвать из ProjectB. Этот интерфейс находится в отдельном проекте библиотеки классов. Connect
класс в ProjectA реализует IAddInCommunication
интерфейс (наряду с некоторыми другими). Я также добавил ссылку на DLL интерфейса в ProjectB.
Сейчас я пытаюсь вызвать методы общей надстройки, которая работает, например, в MS Word. Чтобы добиться этого, я использую следующий код (в ProjectB):
const string ProgId="ProjectA.Connect";
//...
Type officeAddInType = Type.GetTypeFromProgID(ProgId);
object obj = Activator.CreateInstance(officeAddInType);
_remoteAddIn = (IAddInCommunication)obj;
_remoteAddIn.TestMethod("Hello");
Проблема в том, что _remoteAddIn
не указывает на экземпляр, работающий в Office. Это просто новый экземпляр (как и следовало ожидать). Как я могу подключиться к действующему экземпляру Shared-AddIn?
Я решил обмен данными между ProjectA и ProjectB с помощью API SendMessage, потому что в любом случае мне это было нужно в моем приложении. Я бы реализовал коммуникацию SendMessage в своем надстройке, если действительно нет лучшего способа.
1 ответ
Вы, вероятно, ищете:
(IAddInCommunication)System.Runtime.InteropServices.Marshal.GetActiveObject(ProgId);
Чтобы получить что-то из таблицы запущенных объектов.