扩展上下文没有方法

时间:2013-01-03 13:42:27

标签: c++ flex actionscript air native

我正在尝试使用C ++编写一个用于adobe flex项目的本机扩展。我仔细检查了一百次,但无论我做什么,我总是得到错误"扩展上下文没有一个名为getHelloWorld"的方法。

这是我的代码:

Flash Builder actionscript类:

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构建器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;
}

似乎我以正确的方式连接了所有的点,但为什么它不想工作呢?

0 个答案:

没有答案