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

e-L*_*ner 15 php c# windows dll taglib-sharp

您好我想扫描音频 - 视频文件并使用php将其元数据存储在数据库中.我发现这个命令行包装器使用由banshee开发人员编译的TagLib.dll来完成这项工作.它工作正常但受实现的功能限制.我想通过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";
Run Code Online (Sandbox Code Playgroud)

这是 github中的Taglib#项目源代码

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

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

;

;

DESCRIPTION     "Simple COM object"

EXPORTS
                DllGetClassObject       PRIVATE
                DllCanUnloadNow         PRIVATE
                DllRegisterServer       PRIVATE
                DllUnregisterServer     PRIVATE
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何构建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

小智 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. 阅读输出窗口的内容以查看一些警告

现在您已经有了 src\taglib-sharp.dll,您需要将其注册到全局程序集缓存中,以便 DOTNET 类能够找到它。如果您对此不熟悉,请参阅PHP DOTNET hell了解详细信息。

如果一切顺利,您可以获取 SharpZipLib 的副本,然后重新输入 HAVE_SHARPZIPLIB 条件编译符号 --> 重建 --> 重新部署到 GAC --> 做一个快乐的人!:)