Соберите TagLib# DLL из исходного кода и сделайте его видимым для 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 доступным;
  • Зарегистрируйте dll с regsvr32;
  • Используйте файл определения модуля, похожий на

;

;

DESCRIPTION     "Simple COM object"

EXPORTS
                DllGetClassObject       PRIVATE
                DllCanUnloadNow         PRIVATE
                DllRegisterServer       PRIVATE
                DllUnregisterServer     PRIVATE

У меня вопрос: как я могу собрать DLL и использовать ее метод через PHP?

Мой конфиг:

  • Операционные системы

    Windows Server 2012 R2 Standard Edition i586

  • Apache:

    Apache / 2.2.21 (Win32) DAV / 2 PHP / 5.4.42 mod_ssl / 2.2.21 OpenSSL / 0.9.8r

  • PHP

    Версия PHP: 5.4.42
    Арка: x86
    Компилятор: MSVC9 (Visual C++ 2008)
    Поддержка COM: включена
    Поддержка DCOM: отключена
    Поддержка.Net включена

  • Microsoft Visual Studio 2013

2 ответа

Решение

Попробуйте следующие шаги:

  1. Загрузите исходный код taglib с github
  2. Удалите тег ApplicationIcon из файла.csproj и откройте.sln в Visual Studio
  3. Выгрузите тестовый проект (вам не нужно его строить)
  4. Щелкните правой кнопкой мыши проект taglib-sharp -> Свойства -> Сборка -> Включить 'Регистрация для взаимодействия COM'. Также очистите текстовое поле условных символов компиляции, чтобы вам не пришлось сейчас загружать SharpZipLib.
  5. Наблюдайте № 1: в свойствах проекта -> Приложение -> Информация о сборке -> Проверено "Сделать сборку видимой".
  6. Заметьте #2: в свойствах проекта -> Приложение -> целевой фреймворк установлен на 3,5 (убедитесь, что вы оставили его таким)
  7. Построить проект (F6)
  8. Прочитайте содержимое окна вывода, чтобы увидеть некоторые предупреждения

Теперь, когда у вас есть src\taglib-sharp.dll, вам нужно зарегистрировать его в глобальном кэше сборок, чтобы класс DOTNET нашел его. Смотрите PHP DOTNET ад для деталей, если вы не знакомы с этим.

Если все хорошо, вы можете получить копию SharpZipLib и повторно ввести символ условной компиляции HAVE_SHARPZIPLIB -> rebuild -> redeploy to GAC -> и быть счастливым человеком!:)

Вы можете скомпилировать свою DLL с помощью.NET Framework 3.5, если нет, PHP не сможет загрузить ее через класс DOTNET.

Загрузить.NET 3.5

Другие вопросы по тегам