Связь между COM DLL и C # - PullRequest
       59

Связь между COM DLL и C #

3 голосов
/ 12 мая 2009

Я задал вопрос на днях относительно значков наложения. С помощью я выяснил, как заставить это работать.

Вот как работает наложение значков (насколько я понимаю): перед тем, как оболочка рисует значок, она связывается со всеми обработчиками наложения значков в системе, чтобы определить, следует ли рисовать наложение на этот конкретный значок.

Моя настройка:
У меня есть зарегистрированное расширение оболочки (Icon Overlay Handler), которое я хочу использовать для отображения значков наложений. Кроме того, у меня есть приложение .NET (C #), которое будет писать в базу данных (SQLite, скорее всего) с именами и т. Д. Всех файлов и папок, на которых я хочу отобразить наложение.

Моя проблема:
Как заставить расширение Shell (я думаю, что это в основном COM DLL) перезвонить в мое приложение .NET? Или это перебор, и мне нужно просто прочитать расширение Shell непосредственно из базы данных?

Возможные решения?

  1. Расширение оболочки (обработчик наложения значков) считывает базу данных и определяет, отображать ли наложение.
  2. Попросите расширение оболочки перезвонить в приложение .NET, чтобы определить, показывать ли наложение.

Надеюсь, в этом есть смысл, если нет, я попытаюсь уточнить.

Ответы [ 2 ]

2 голосов
/ 13 мая 2009

Да, если вы пометите вашу сборку как видимую COM и запустите regasm, тогда ваша dll COM может импортировать созданную библиотеку типов и вызвать CoCreateInstance для получения ссылки на ваши классы .NET.

ОДНАКО, немного страшно втянуть платформу .NET в расширение оболочки . Таким образом, вы можете убедиться, что код .NET вызывается вне процесса ... например, CLSCTX_LOCAL _SERVER для CoCreateInstance.

2 голосов
/ 12 мая 2009

COM DLL не может напрямую взаимодействовать со сборкой .NET. Возможно, вам придется представить вашу сборку .NET как COM-объект и вместо этого поговорить с этим COM-объектом. Но на самом деле это может быть излишним в вашем сценарии. Другим вариантом может быть предоставление функциональности, которая взаимодействует с базой данных в вашей сборке .NET, как некоторый совместимый сервис (WCF?), Который может вызываться из расширения оболочки.

...