ATL ИЛИ C # для расширения оболочки Windows / пространства имен? - PullRequest
1 голос
/ 22 марта 2010

У меня есть вопрос, после того, как я потратил много времени на поиск и чтение статей, я понял, что расширение пространства имен в Windows довольно сложно (по крайней мере, в C ++), теперь я также видел его возможно сделать это в C #, но microsft официально не подтверждает использование .net для расширений пространства имен ... хотя я видел очень хорошую коммерческую платформу Namespace Extenssion, но ни одна из них не бесплатна ....

так что на мой вопрос :), я хочу разработать свое собственное расширение пространства имен, у меня есть знание C ++ / C # и базовый COM / ATL, но если это можно сделать, я предпочитаю c #, так что c # inteop может полностью выполнять работу безслишком много трюков?или нужно заняться дайвингом в ATL, чтобы создать необходимые COM-объекты ...

спасибо!

Ответы [ 2 ]

5 голосов
/ 22 марта 2010

В общем, до сих пор было плохой идеей написать расширение оболочки в управляемом коде . Процесс загружает только одну версию CLR, и если кто-то первым выбрал другую версию, взрыв, вы мертвы.

Это может измениться в ближайшем будущем, но на этом этапе придерживайтесь собственного кода для расширения вашей оболочки.

3 голосов
/ 22 марта 2010

РЕДАКТИРОВАТЬ: Вот несколько официальных слов по этому вопросу:

http://msdn.microsoft.com/en-us/magazine/ee819091.aspx

Обратите внимание на очень точную информацию о том, как код, нацеленный на 2.x и более поздние версии, может сосуществовать с 4.0 внутри одного и того же процесса. Таким образом, хотя SxS является функцией 4.0, она имеет преимущества для пользователей 2.x.

Однако есть такое условие:

С возможностью иметь несколько время выполнения в процессе с любым другим время выполнения, теперь мы можем предложить общий поддержка написания управляемой оболочки расширения - даже те, которые работают в процессе с произвольными заявлениями на машине. Мы еще не поддержка написания расширений оболочки с использованием любая версия ранее .NET Framework 4, потому что эти версии среда выполнения не загружается в процессе друг с другом и вызовет неудачи во многих случаях.

Итак, есть дополнительная проблема: процесс explorer.exe - не единственный процесс, в котором размещаются расширения оболочки. Любой программе, которая имеет диалог открытия файла, может потребоваться загрузка расширений оболочки. Таким образом, ваши расширения .NET 2.0-3.5 не смогут загружаться в диалоге открытия файлов любого приложения .NET 1.x. Это будет похожая история с такими вещами, как компоненты графического интерфейса драйверов принтера, которые также загружаются в любое приложение, отображающее стандартное диалоговое окно «Принтер».

Поэтому, если вы хотите разработать расширение управляемой оболочки, VS2010 - это то место, с которого нужно начинать.

...