【问题标题】:How to create multiple contexts for the same Adobe Air ANE extension如何为同一个 Adob​​e Air ANE 扩展创建多个上下文
【发布时间】:2016-03-01 20:49:55
【问题描述】:

有没有办法使用多个上下文创建同一个 ANE 扩展的多个实例?

我已阅读文档,它说我可以,但我不明白怎么做。

目前,如果我尝试创建扩展的新实例,我返回的数据会混淆(来自一个实例的数据返回到另一个实例)。

这是我拥有的 iOS 初始化程序:

FREObject init(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
    eventContext = ctx;

    return NULL;
}

也许问题是每次我从 ActionScript 调用 init 方法时,该方法只是将上下文设置为最新的?

我还阅读了http://www.adobe.com/devnet/air/articles/extending-air.html,它指向了我想要的场景——扩展和我创建的新上下文之间的一对一关系。问题是我通过从 AS 发送一个空的 FREByteArray 对象将数据从 ANE 返回到 AS,然后用数据填充该对象 - 我不处理上下文,因此在这一步我无法区分它们。

任何指导都会非常有帮助,因为我可能不理解上下文的概念并滥用它们。

【问题讨论】:

    标签: ios actionscript-3 air


    【解决方案1】:

    你尝试过使用 contextType 吗?

    在 Obj-C 中

    typedef void (*FREContextInitializer)( 
        void*                        extData, 
        const uint8_t*           contextType, 
        FREContext               context, 
        uint32_t*                numFunctionsToSet, 
        const FRENamedFunction** functionsToSet
    );
    

    在动作脚本中

    ExtensionContext.createExtensionContext(EXTENSION_ID, CONTEXT_TYPE)
    

    参考资料:

    FREContextInitializer() Native C

    ExtensionContext.createExtensionContext() ActionScript

    【讨论】:

    • 感谢您的建议。上下文类型会有什么不同吗,因为我没有阅读它,并且根据上下文类型我没有不同的方法?
    • 你可以在你的 FREContextInitializer 中使用它作为条件
    • void YourContextInitializer (void* ctxData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFuncToTest, const FRENamedFunction** funcToset) { *numFuncToTest = 1; FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction) * (*numFuncToTest)); func[0].name = (const uint8_t*)"init"; func[0].functionData = NULL; if([[NSString stringWithUTF8String:(char *) ctxType] isEqual @"demo"]) { func[0].function = &initOne; } else { func[0].function = &initTwo; } *funcToset = func; }
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2015-12-13
    • 2013-05-05
    • 2016-04-27
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多