簡體   English   中英

從源代碼構建TagLib#DLL並使其對PHP可見

[英]Build TagLib# DLL from source and make it COM Visible to PHP

您好我想掃描音頻 - 視頻文件並使用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";

這是 github中的Taglib#項目源代碼

我看到很多關於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

嘗試以下步驟:

  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地獄

如果一切順利,你可以獲得一份SharpZipLib,並重新輸入HAVE_SHARPZIPLIB條件編譯符號 - > rebuild - >重新部署到GAC - >並成為一個快樂的人! :)

如果沒有,您可以使用.NET Framework 3.5編譯DLL,PHP無法通過DOTNET類加載它。

下載.NET 3.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM