Ссылка на существующий экземпляр 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(Pro‌​gId);

Чтобы получить что-то из таблицы запущенных объектов.

Другие вопросы по тегам