首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AIR Native Extensions "The extension context AIR not a method with the name“

AIR Native Extensions "The extension context AIR not a method with the name“
EN

Stack Overflow用户
提问于 2011-12-03 02:02:08
回答 7查看 8.1K关注 0票数 1

我正在尝试创建一个AIR Native扩展,在成功编译所有组件后,Flash Builder 4.6会记录"Error #3500: The Extension context‘s not a method with the name.“。

下面是本机DLL的C++代码:

代码语言:javascript
复制
#include "stdafx.h"
#include "TestANE.h"

#include "FlashRuntimeExtensions.h"

#include <string>
#include <iostream>
#include <iomanip>
#include <algorithm>

using namespace std;

FREObject isSupported(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
    FREObject result;

    uint32_t isSupportedSwitch = 1;
    FRENewObjectFromBool(isSupportedSwitch, &result);

    return result;
}

FREObject getString(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
    FREObject result;

    const char *testString = "Hello World from C++!";
    FRENewObjectFromUTF8(strlen(testString)+1, (const uint8_t *) testString, &result);

    return result;
}

void taneContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction** functions) { 
    *numFunctions = 2;
    FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * (*numFunctions));

    func[0].name = (const uint8_t*) "isSupported";
    func[0].functionData = NULL;
    func[0].function = &isSupported;

    func[1].name = (const uint8_t*) "getString";
    func[1].functionData = NULL;
    func[1].function = &getString;

    *functions = func;
}

void taneContextFinalizer(FREContext ctx) {
    return;
}

void taneInitializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer) { 
    *ctxInitializer = &taneContextInitializer;
    *ctxFinalizer = &taneContextFinalizer;
}

void taneFinalizer(void* extData) {
    return;
}

以下是ActionScript 3接口的代码:

代码语言:javascript
复制
package com.tests.TestANE {
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.external.ExtensionContext;

    public class TestANE extends EventDispatcher {

        private var _ExtensionContext:ExtensionContext;

        public function TestANE(target:IEventDispatcher=null) {

            this._ExtensionContext = ExtensionContext.createExtensionContext("com.tests.TestANE", null);

            super(target);
        }

        public function isSupported():Boolean {
            return _ExtensionContext.call("isSupported") as Boolean;
        }

        public function getString():String {
            return _ExtensionContext.call("getString") as String;
        }

        public function dispose():void {
            this._ExtensionContext.dispose();
        }
    }
}

任何帮助解决这个问题的人都将不胜感激。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-12-07 04:50:18

我已经解决了这个问题。我不是完全确定,因为我开始了另一个项目,并从那里建立。然而,我怀疑问题与代码的ActionScript部分和扩展描述符中错误的包名有关。

票数 0
EN

Stack Overflow用户

发布于 2012-09-06 19:49:47

请在这里之前查看:http://forums.adobe.com/thread/923158

如果在同一项目中有多个扩展时出现此错误,请小心:每个初始化器结束终结器方法在所有扩展之间必须具有不同且唯一的名称。注意:不仅是在extension.xml中指定的方法,还包括您延迟以初始化上下文的方法。需要明确的是:不仅扩展初始化器,而且项目内的上下文初始化器在所有扩展之间都必须有唯一的名称。

例如:

代码语言:javascript
复制
 void UNIQUE_NAME_ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, 
                    FREContextFinalizer* ctxFinalizerToSet) {

       NSLog(@"Entering ExtInitializer()");

       *extDataToSet = NULL;
       *ctxInitializerToSet = &UNIQUE_NAME_ContextInitializer;
       *ctxFinalizerToSet = &UNIQUE_NAME_ContextFinalizer;

       NSLog(@"Exiting ExtInitializer()");
}

void UNIQUE_NAME_ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, 
                        uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) 
{

    *numFunctionsToTest = 1;

    FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 1);
    func[0].name = (const uint8_t*) "scan";
    func[0].functionData = NULL;
    func[0].function = &scan;

    *functionsToSet = func;
}

终结器也是如此。

我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2012-09-07 15:08:54

为了解决ANE之间的符号名称冲突,在AIR 3.4中增加了一个新的ADT选项,即hideANELibSymbols

参考:http://help.adobe.com/en_US/air/build/WS901d38e593cd1bac1e63e3d128cdca935b-8000.html

此外,为了简化为iOS编写an的入门过程,我编写了一个xcode和模板。

参考:https://github.com/divijkumar/xcode-template-ane

在开始之前,一定要阅读github维基页面上的说明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8360591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档