从源代码构建TagLib#DLL并使其对PHP可见

时间:2015-07-17 14:57:18

标签: c# php windows dll taglib-sharp

您好我想扫描音频 - 视频文件并使用php将其元数据存储在数据库中。我发现这个Command-line wrapper使用TagLib.dll compiled by banshee developpers来完成这项工作。它的工作正常但受实现的功能限制。我想通过PHP直接访问dll方法。

在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";

这是 the Taglib# project sources in github

我看到很多关于PHP-DLL-COM的问题,并且有一些建议:

  • 使dll可见;
  • 使用regsvr32;
  • 注册dll
  • 使用类似于
  • 的模块定义文件

;

DESCRIPTION     "Simple COM object"

EXPORTS
                DllGetClassObject       PRIVATE
                DllCanUnloadNow         PRIVATE
                DllRegisterServer       PRIVATE
                DllUnregisterServer     PRIVATE

我的问题是: 如何构建DLL并通过PHP使用其方法?

我的配置

  • OS

      

    Windows Server 2012 R2标准版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
      Arch:x86
      编译器:MSVC9(Visual C ++ 2008)
      COM支持:启用
      DCOM支持:禁用
      .Net支持已启用

  • Microsoft Visual Studio 2013

2 个答案:

答案 0 :(得分:1)

尝试以下步骤:

  1. 从github下载taglib源代码
  2. 从.csproj文件中删除ApplicationIcon标记并在Visual Studio中打开.sln
  3. 卸载测试项目(您不需要构建此项目)
  4. 右键单击taglib-sharp项目 - >属性 - >构建 - >启用'注册COM互操作'。同时清除条件编译符号文本框,这样您就不必为现在下载SharpZipLib而烦恼。
  5. 观察#1:在项目属性中 - >申请 - >装配信息 - > '使装配COM可见'已检查
  6. 观察#2:在项目属性中 - >申请 - >目标框架设置为3.5(确保你保持原样)
  7. 构建项目(F6)
  8. 阅读输出窗口的内容以查看一些警告
  9. 现在你有了src \ taglib-sharp.dll,你需要将它注册到全局程序集缓存中,以便DOTNET类找到它。如果您不熟悉,请参阅PHP DOTNET hell

    如果一切正常,您可以获得SharpZipLib的副本,并重新输入HAVE_SHARPZIPLIB条件编译符号 - >重建 - >重新部署到GAC - >并且是一个快乐的人! :)

答案 1 :(得分:1)

如果没有,您可以使用.NET Framework 3.5编译DLL,PHP无法通过DOTNET类加载它。

Download .NET 3.5