从源代码构buildTagLib#DLL并使其COM对PHP可见

你好,我想扫描audiovideo文件,并使用PHP将他们的元数据存储在数据库中。 我发现这个命令行包装使用由banshee开发人员编译的TagLib.dll来完成这项工作。 它工作正常,但受到实施function的限制。 我想通过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"; 

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

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

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

;

 ; DESCRIPTION "Simple COM object" EXPORTS DllGetClassObject PRIVATE DllCanUnloadNow PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE 

我的问题是: 我怎样才能构buildDLL并通过PHP使用它的方法?

我的configuration

  • 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. 从github下载taglib源代码
  2. 从.csproj文件中删除ApplicationIcon标记并在Visual Studio中打开.sln
  3. 卸载测试项目(你不需要建立这个)
  4. 右键单击taglib-sharp项目 – >属性 – >编译 – >启用“注册COM互操作”。 还要清除条件编译符号文本框,以便您现在不必担心下载SharpZipLib。
  5. 观察#1:在项目属性 – >应用程序 – >程序集信息 – >'Make assembly COM visible'被选中
  6. 观察#2:在项目属性 – >应用程序 – >目标框架设置为3.5(请确保您保持原样)
  7. 建立项目(F6)
  8. 阅读输出窗口的内容,看到一些警告

现在你有src \ taglib-sharp.dll,你需要注册到全局程序集缓存中,以便DOTNET类找到它。 如果您不熟悉这个,请参阅PHP DOTNET地狱细节。

如果一切正常,你可以得到一个SharpZipLib的副本,并重新输入HAVE_SHARPZIPLIB条件编译符号 – >重建 – >重新部署到GAC – >成为一个快乐的人! 🙂

如果没有的话,你可以用.NET Framework 3.5编译你​​的DLL,PHP不能通过DOTNET类加载它。

下载.NET 3.5