2016-05-17 106 views
0

我試圖創建一個ExtendScript DLL庫來加載ExternalObject函數。在64位窗口上的Adobe ExtendScript ExternalObject

它適用於32位InDesign版本。但是,Windows上的64位版本InDesign CC無法加載。

設置ExternalObject.log = true僅導致「ExtObj: load error!」消息。

我想即使拿到樣本項目「BasicExternalObject」和「SampleLib」運行並不能獲得那些運行。

我正在運行Visual Studio 2015社區版。

在此先感謝任何指針。

回答

0

在Visual Studio中,您需要爲x64平臺編譯和構建。您可以通過轉到Visual Studio主菜單欄下的下拉列表並選擇x64來完成此操作。

Main menu bar in Visual Studio Express 2012 showing platform choice dropdown

當然,你需要確保你的項目屬性設置爲正確的x64平臺。您可以通過在「解決方案資源管理器」面板中右鍵單擊項目名稱,然後單擊「屬性...」來完成此操作。當對話框出現時,確保頂部的下拉列表設置爲x64。

enter image description here

+0

感謝您的回覆。我已經嘗試過,並沒有取得任何成功(我必須將x64平臺添加到示例程序附帶的項目中。 如果您已經成功完成此操作,請介紹給我一個示例項目文件,以便我可以比較我的設置? – bwflyer

0

我能解決這個問題。這是問題的組合。

  1. 確保所有包含的庫都使用相同的庫編譯器設置編譯。我使用多線程靜態。
  2. 請參閱第1項 - 確保您沒有任何需要安裝VS 2015運行時庫的相關性問題。
  3. 需要爲x64提供DLL的版本。 ExtendScript代碼需要檢測該環境並加載正確的版本。

    var isWin = (File.fs == "Windows"); 
    var libFilename = (isWin) ? "HttpLib.dll" : "HttpLib.framework"; 
    
    if (isWin && ($.os.indexOf("64") > 0)) { 
        // we're on a 64 bit OS - see if the program path is in the 64 bit path 
        if (app.filePath.fsName.indexOf("x86") == -1) { // looks like we're 64 bit then 
         libFilename = "HttpLib64.dll"; 
        } 
    } 
    
  4. 在加載前使用「.fsName」 - 它在路徑中有空格的目錄上失敗。

    var libPath = File($.fileName).parent.fsName + "/" + libFilename; 
    var httpLib = new ExternalObject("lib:" + libPath);