Использование COM для RPC с C на C#

#c# #c #winapi #com #rpc

#c# #c #winapi #com #rpc

Вопрос:

Мне нужно реализовать класс на C , который может вызывать функцию C # из неуправляемого C и возвращать значение. Я сделал это с C на C , используя привязку MIDL / RPC по именованному каналу, которая отлично работает, но теперь мое серверное приложение переходит на C #, но клиент должен оставаться неуправляемым C (это расширение explorer).

Я рассмотрел различные методы, и многие люди предлагают COM, насколько я понимаю, COM предназначен не столько для IPC / RPC, сколько для размещения обслуживаемого объекта в клиентском приложении. Возможно ли это с COM, если да, может ли кто-нибудь указать мне в направлении хорошей ссылки или примера?

Редактировать:

Просто для ясности, я не могу использовать управляемый код, поскольку клиент (DLL) загружается в пространство процессов Explorer.

Чего я пытаюсь добиться, так это того, что когда пользователь щелкает правой кнопкой мыши по файлу, расширение запрашивает у запущенной службы (сеанс 0) некоторые сведения о файле. Ранее это делалось с помощью RPC в клиенте / сервере C <-> C . Теперь сервер обновлен до C #, но я не уверен, какие у меня есть варианты. Является ли COM вариантом?

Спасибо, J

Комментарии:

1. COM использует RPC, когда это необходимо, в случаях, когда процесс не выполняется или между подразделениями. Отсутствие необходимости спорить с RPC, конечно, очень приятно. В вашем вопросе недостаточно подробностей, чтобы даже сказать, применимо ли это.

2. Отредактировано, чтобы включить некоторые дополнительные детали.

Ответ №1:

Используйте смешанную CLR и собственную C DLL. Проверьте MSDN и инструменты.

Совместимость с собственными и .NET

Комментарии:

1. Я не могу использовать CLR в своем расширении, поскольку оно загружается в пространство процессов Explorer. blogs.msdn.com/b/junfeng/archive/2005/11/18/494572.aspx

2. @JWood: Что вы хотите использовать из .net? Собственный модуль?

3. Мне нужно вызвать функцию в запущенной службе C #, чтобы получить информацию о файле, когда пользователь щелкает правой кнопкой мыши в проводнике. WCF прекрасно достигает этого с помощью именованных каналов, но как неуправляемый C может вызывать функцию в запущенной службе C #?

4. @JWood: для IPC я обычно использую TCP / IP и XML. Они надежны в будущем и независимы от системы.

5. Это не обязательно должно быть независимым от системы, это только для Windows, и при создании библиотек TPC / IP и XML в расширение Explorer возникает много накладных расходов. Это должно было быть моим последним средством, но поскольку COM часто предлагался, я хотел изучить возможность.