Создание библиотеки windows-7 с использованием c # - PullRequest
0 голосов
/ 25 ноября 2011

Windows-7 представила концепцию виртуальной папки под названием «Библиотеки».

Я работаю над реализацией библиотеки с помощью моего настраиваемого действия.Ограничение заключается в том, что я должен придерживаться версии .NET 2 для этого: (

Осматривая, я не нашел ни одного нативного (c / C ++) API для этого. Я планирую использоватьВзаимодействие (p-Invoke) для создания библиотеки, как только я получу нативные API.

Может ли кто-нибудь указать на ссылку или документацию, которая может помочь. Если как-то я могу сделать это непосредственно из C # (с .NET v2)Это было бы здорово.

Спасибо, Джон

Ответы [ 3 ]

4 голосов
/ 25 ноября 2011

Темы MSDN, которые кажутся наиболее подходящими:

Функции библиотеки доступны через COM, поэтому нет необходимости в P / invoke.

Однако, поскольку библиотеки существуют только в Windows 7, а Windows 7 имеет .net 3.5 как часть ОС, я бы порекомендовал вам поместить эту часть вашего приложения в сборку .net 3.5. Фактически, сборка API CodePack уже делает это для вас.

Конечно, поскольку CodePack также поставляется в качестве исходного кода, вы можете извлечь из него необходимые части и сделать то, что нужно для сборки его на .net 2.0.

3 голосов
/ 25 ноября 2011

Понятие "виртуальная папка" существует еще до Windows 7, и AFAIK только что был "усовершенствован" ... вы пишете, что хотите сделать это с помощью собственного пользовательского обработчика ...

ЕСЛИ хотитереализовать такую ​​«виртуальную папку» и интегрировать ее в Windows, чтобы другие приложения могли использовать ее в качестве «виртуальной папки», а затем:

реализовать и установить «расширение оболочки» (которое в основномсвязка COM-интерфейсов):

Примечание: Если в системе, в которой вы работаете, нет .NET 4, тогда Microsoft рекомендовала НЕ использовать .NET для этого из-за врожденного ограниченияс более старыми версиями, что один процесс не может запускать несколько версий платформы одновременно.В зависимости от случая ОС и т. Д. Можно было бы порекомендовать реализовать это с C / C ++.
Даже с .NET 4, как указано в комментариях, проблема внедрения кода остается - т.е. если какое-либо приложение .NET до .NET 4 и/ или с версиями .NET, отличными от вашего расширения оболочки, доступ к диалоговому окну открытия файла, например, он может / потерпит неудачу.
Чтобы обойти это , вам нужно реализовать собственную прокси-библиотеку DLL, которая загружается всоответствующие процессы (например, Windows Explorer) и взаимодействует с вашей реализацией .NET через IPC.

В этом конкретном случае вам необходимо создать расширение оболочки, которое реализует IShellLibrary .

То, что реализация расширения оболочки - очень сложная работа ... некоторые ссылки с информацией / примерами / исходным кодом / библиотеками и т. Д .:

Для взаимодействия с библиотекой Windows 7 см. http://support.microsoft.com/kb/976027 и http://www.codeproject.com/KB/miscctrl/Windows7APICodePack.aspx и http://archive.msdn.microsoft.com/WindowsAPICodePack и http://www.codeproject.com/KB/cs/DDW7LibrariesLite.aspx.Для некоторых требуется .NET 3.5, но, поскольку 3.5 - это всего лишь 2.0 плюс некоторые дополнительные сборки, это может быть вариантом ...

0 голосов
/ 25 ноября 2011

Вкратце поиска в гугле, нашел вот это: Как программно манипулировать библиотеками оболочки Windows 7

если примеры на C # бесполезны, должна быть возможность экспортировать методы api, используемые в примере c ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...