2016-05-17 61 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);