Question

j'ai une erreur que je ne comprends pas pourquoi apparaissent, les est-ce qui arrive le plus bizarre parfois, mais il arrive ces derniers temps toujours, le code que je utilisation est le même et je n'ai pas apporter des modifications, en fait je ne signeront les code dans le début de l'application, j'utiliser les boutons, donc je ne reçois une raison avec cette erreur aide-moi s'il vous plaît, l'erreur est une boîte de dialogue par exemple:

extension native Erreur: il y a des erreurs / avertissement d'emballage. Vérifiez chaque extension native de la génération Flex Packaging page pour chaque plate-forme cible. voulez-vous continuer?

Et quand je clique sur oui le début du programme de Do not, le debbuger me montre la ligne:

[SWF] SerialCOMGame.swf - 2,121,630 octets après décompression

mais jamais commencer, je suis en utilisant la bibliothèque RS232 pour la communication série, avant d'obtenir cette erreur ce travail bien, mais je ne sais pas ce qui se passe, mon code C est:

/*
 * NativeSerialComunication.c
 *
 *  Created on: Jan 10, 2012
 *      Author: Diego Fernando
 */
#include "NativeSerialComunication.h"
int comport = 0;
int baudrate = 57600;
int buffsize = 4096;
unsigned char buffer[4096];
uint32_t comportOpened = 0;
FREObject IsSupported(FREContext ctx, void* functionData, uint32_t argc,
        FREObject argv[]) {
    FREObject result;
    uint32_t isSuppoerted = 1;
    FRENewObjectFromBool(isSuppoerted, &result);
    return result;
}

int startCOMListener() {
    if (!OpenComport(comport, baudrate)) {
        comportOpened = 1;
        return 1;
    }
    return 0;
}

void stopCOMListener() {
    CloseComport(comport);
    comportOpened = 0;
}

void COMListener(FREContext ctx) {
    uint8_t compbytes = 0;
    while (comportOpened) {
        compbytes = PollComport(comport, buffer, buffsize);
        FREDispatchStatusEventAsync(ctx, (const uint8_t *) "listening for data",(const uint8_t *)"datalistening");
        if (compbytes) {
            FREDispatchStatusEventAsync(ctx, (const uint8_t *) buffer,
                    (const uint8_t *) "datareceived");
        }
        Sleep(100);
    }
}
FREObject startSerialListener(FREContext ctx, void* functionData, uint32_t argc,
        FREObject argv[]) {
    FREObject result;
    if (startCOMListener()) {
        CreateThread((LPSECURITY_ATTRIBUTES) NULL, 0,(LPTHREAD_START_ROUTINE) COMListener, ctx, 0, NULL);
        FREDispatchStatusEventAsync(ctx, (const uint8_t *) "listener started",
                                    (const uint8_t *) "listenerstarted");
    }
    FRENewObjectFromBool(comportOpened, &result);
    return result;
}

FREObject stopSerialListener(FREContext ctx, void* functionData, uint32_t argc,
        FREObject argv[]) {
    FREObject result;
    stopCOMListener();
    FRENewObjectFromBool(comportOpened, &result);
    return result;
}

FREObject sendDataToSerialPort(FREContext ctx, void* functionData,
        uint32_t argc, FREObject argv[]) {
    FREObject result;
    uint32_t dataSended = 0;
    uint32_t dataToSend = 0;
    FREGetObjectAsUint32(argv[0],&dataToSend);
    printf("data to be sended %d",dataToSend);

    if (comportOpened && !SendByte(comport,dataToSend)) {
        dataSended = 1;
    }
    FRENewObjectFromBool(dataSended, &result);
    return result;
}

void MyContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx,
        uint32_t* numFunctionsToSet, const FRENamedFunction** functionsToSet) {

    *numFunctionsToSet = 4;

    FRENamedFunction* func = (FRENamedFunction*) malloc(
            sizeof(FRENamedFunction) * 4);
    func[0].name = (const uint8_t*) "isSupported";
    func[0].functionData = 0;
    func[0].function = &IsSupported;

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

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

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

    /*func[1].name = (const uint8_t*) "sayHelloWorld";
     func[1].functionData = 0;
     func[1].function = &sayHelloWorld;*/

    *functionsToSet = func;
}

void MyContextFinalizer(FREContext ctx) {
    return;
}

void initializer(void** extDataToSet,
        FREContextInitializer* ctxInitializerToSet,
        FREContextFinalizer* ctxFinalizerToSet) {
    extDataToSet = 0; // This example does not use any extension data.
    *ctxInitializerToSet = &MyContextInitializer;
    *ctxFinalizerToSet = &MyContextFinalizer;

}

void finalizer(void** extDataToSet) {
    stopCOMListener();
    return;
}

Et voici mon code ActionScript qui utilisent le code natif C:

package com.nativeserialcomunication.driver
{
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.events.StatusEvent;
    import flash.external.ExtensionContext;

    public class NativeSerialComunication extends EventDispatcher
    {
        private var extensionContext:ExtensionContext;
        private var isSerialListenerStarted:Boolean = false;
        public function NativeSerialComunication(target:IEventDispatcher=null)
        {
            super(target);
            extensionContext =ExtensionContext.createExtensionContext("com.nativeserialcomunitacion.driver.NativeSerialComunitation","");
            extensionContext.addEventListener(StatusEvent.STATUS,statusHandle);
        }

        public function init():void{
            if(extensionContext.call("startSerialListener") as Boolean){
                isSerialListenerStarted = true;
                trace("serial listener started");
            }
            else{
                trace("no serial listener started");
            }
        }

        public function statusHandle(event:StatusEvent):void{
            trace("the event ("+event.level+") received, data:"+event.code);
        }

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

        public function sendDataToSerialPort(data:uint):Boolean{
            return extensionContext.call("sendDataToSerialPort",data) as Boolean;
        }
    }
}
Était-ce utile?

La solution

La case à cocher package d'extension native de votre plate-forme cible (s) peut devoir vérifier.

Accédez à:

Propriétés du projet -> Flex Packaging Build -> Apple iOS (. Ou Android, etc.)

Sélectionnez l'onglet Extensions natives et assurez-vous "Package" est cochée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top