#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 и инструменты.
Комментарии:
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 часто предлагался, я хотел изучить возможность.