64位窗口上的Adobe ExtendScript ExternalObject

时间:2016-05-17 01:55:02

标签: adobe-indesign extendscript

我正在尝试创建一个ExtendScript DLL库来加载ExternalObject函数。

适用于32位的InDesign版本。但是在Windows上的64位版本的InDesign CC上无法加载。

设置ExternalObject.log = true只会产生“ExtObj: load error!”消息。

我试图让示例项目“ BasicExternalObject ”和“ SampleLib ”运行,但无法运行。

我正在运行Visual Studio 2015社区版。

提前感谢任何指针。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);