Я пытаюсь создать собственное расширение, написанное на C ++ для Adobe Flex проекта. Я дважды проверил все сто раз, но что бы я ни делал, я всегда получаю сообщение об ошибке «В контексте расширения нет метода с именем getHelloWorld».
Это мой код:
Класс ActionScript для Flash Builder:
package
{
import flash.events.EventDispatcher;
import flash.external.ExtensionContext;
public class QCARBridge extends EventDispatcher
{
private var extContext:ExtensionContext;
public function QCARBridge()
{
extContext = ExtensionContext.createExtensionContext("NativeQCAR", null);
if(!extContext) {
throw new Error("Extension context couldn't be created :(");
}
}
// Native methods
public function getTestString():String {
return extContext.call("getTestString") as String;
}
public function isSupported():int {
return extContext.call("isSupported") as int;
}
public function getHelloWorld():String {
return extContext.call("getHelloWorld") as String;
}
}
}
Flash Builder extension.xml:
<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>NativeQCAR</id>
<versionNumber>1</versionNumber>
<platforms>
<platform name="Windows-x86">
<applicationDeployment>
<nativeLibrary>libNativeQCAR.dll</nativeLibrary>
<initializer>initializer</initializer>
<finalizer>finalizer</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>
и код C ++:
#include "main.h"#include "Stdlib.h"#include "String.h"
FREObject isSupported(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;
uint32_t isSupportedInThisOS = 1;
FRENewObjectFromBool( isSupportedInThisOS, &result);
return result;
}
FREObject getTestString(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;
const char *str = "De android library zegt ook eens hallo...";
FRENewObjectFromUTF8(strlen(str)+1, (const uint8_t *)str, &result);
return result;
}
FREObject getHelloWorld(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;
const char *str = "Hello World!! This is your DLL talking!";
FRENewObjectFromUTF8(strlen(str)+1, (const uint8_t *)str, &result);
return result;
}
void contextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction** functions)
{
*numFunctions = 3;
FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * (*numFunctions));
func[0].name = (const uint8_t*) "getTestString";
func[0].functionData = NULL;
func[0].function = &getTestString;
func[1].name = (const uint8_t*) "isSupported";
func[1].functionData = NULL;
func[1].function = &isSupported;
func[2].name = (const uint8_t*) "getHelloWorld";
func[2].functionData = NULL;
func[2].function = &getHelloWorld;
*functions = func;
}
void contextFinalizer(FREContext ctx)
{
return;
}
void initializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer)
{
*ctxInitializer = &contextInitializer;
*ctxFinalizer = &contextFinalizer;
}
void finalizer(void* extData)
{
return;
}
Кажется, я правильно соединил все точки, но почему он не хочет работать?
Задача ещё не решена.
Других решений пока нет …