gpt4 book ai didi

c++ - AIR native 扩展 "The extension context does not have a method with the name"

转载 作者:行者123 更新时间:2023-11-30 02:06:57 25 4
gpt4 key购买 nike

我正在尝试制作一个 AIR native 扩展,在成功编译所有组件后,Flash Builder 4.6 记录“错误 #3500:扩展上下文没有名称为...的方法”。

这是 native DLL 的 C++ 代码:

#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 界面的代码:

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();
}
}
}

如能帮助解决此问题,我们将不胜感激。

最佳答案

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

如果在同一个项目中有多个扩展时出现此错误,请注意:每个初始化器结束终结器方法必须在所有扩展之间具有不同且唯一的名称。注意。不仅是 extension.xml 中指定的方法,还有您委托(delegate)初始化上下文的方法。需要明确的是:不仅是扩展初始化器,项目中的上下文初始化器也必须在所有扩展之间具有唯一的名称。

例如:

 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;
}

终结器也是如此。

希望对您有所帮助。

关于c++ - AIR native 扩展 "The extension context does not have a method with the name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com