Построить TagLib # DLL из исходного кода и сделать его COM видимым для PHP
Здравствуйте, я хочу сканировать аудио-видео файлы и хранить их метаданные в базе данных с помощью php. Я нашел эту оболочку командной строки, которая использует TagLib.dll, скомпилированную разработчиками banshee для выполнения этой задачи. Он отлично работает, но ограничивается реализованными функциями. Я хочу получить доступ непосредственно к dll-методам через PHP.
В PHP у нас есть функция (DOTNET), которая позволяет мне создать экземпляр класса из сборки .Net и вызвать его методы и получить доступ к его свойствам, подобным этому
/*$obj = new DOTNET("assembly", "classname");*/
$stack = new DOTNET("mscorlib", "System.Collections.Stack");
$stack->Push(".Net");
$stack->Push("Hello ");
echo $stack->Pop() . $stack->Pop();
//Returns string(10) "Hello .Net";
Здесь источники проекта Taglib # в github
Я видел много вопросов родственников для PHP-DLL-COM и есть несколько рекомендаций:
- Сделать dll comVisible;
- Зарегистрируйте dll с помощью
regsvr32
;
- Используйте файл определения модуля, похожий на
;
;
DESCRIPTION "Simple COM object"
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
Мой вопрос: Как я могу создать DLL и использовать его метод через PHP?
Моя конфигурация:
Ответы
Ответ 1
Попробуйте выполнить следующие шаги:
- Загрузите исходный код taglib из github
- Удалить тег ApplicationIcon из файла .csproj и открыть .sln в Visual Studio
- Разгрузите тестовый проект (вам не нужно его создавать)
- Щелкните правой кнопкой мыши на проекте taglib-sharp → properties → build → enable 'Register for COM interop'. Также очистите текстовое поле условных компиляций, чтобы вам не пришлось беспокоиться о загрузке SharpZipLib.
- Наблюдать # 1: в свойствах проекта → Приложение → Информация о сборке → 'Сделать сборку COM видимым' отмечен
- Соблюдайте # 2: в свойствах проекта → Приложение → целевая структура установлена на 3.5 (убедитесь, что вы оставите ее как таковой)
- Постройте проект (F6)
- Прочитайте содержимое окна вывода, чтобы увидеть некоторые предупреждения
Теперь, когда у вас есть src\taglib-sharp.dll, вам необходимо зарегистрировать его в глобальном кеше сборок, чтобы класс DOTNET смог его найти. Подробнее см. PHP DOTNET hell, если вы не знакомы с этим.
Если все хорошо, вы можете получить копию SharpZipLib и повторно ввести символ условной компиляции HAVE_SHARPZIPLIB → rebuild → передислоцировать в GAC → и стать счастливым человеком!:)
Ответ 2
Вы можете скомпилировать DLL с .NET Framework 3.5, если нет, PHP не сможет загрузить его через класс DOTNET.
Загрузить .NET 3.5