5

tengo un error que no entiendo por qué aparece, lo más extraño es que sucede a veces, pero últimamente siempre sucede, el código que uso es el mismo y no hago ningún cambio en él, de hecho no ejecuto ningún código en el inicio de la aplicación, uso botones, así que no entiendo el motivo de este error por favor ayúdenme, el error es un diálogo que dice:Flash Builder 4.6 Extensión nativa Error

Error de extensión nativa: hay paquetes errores/advertencia. Compruebe cada extensión nativa en la página de Flex Build Packaging para cada plataforma objetivo. ¿Te gustaria continuar?

y cuando haga clic en Sí el programa no comienza, el Debbuger me muestre la línea:

[SWF] SerialCOMGame.swf - 2,121,630 bytes después de la descompresión

pero nunca empezar, estoy usando la biblioteca RS232 para comunicación en serie, antes de conseguir este error este trabajo bien, pero no sé qué sucede, mi código C es:

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

Y este es mi código ActionScript que utilizan el código nativo de 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; 
     } 
    } 
} 
+0

me gusta el aspecto de esto ... he estado utilizando ArduinoConnector (http://code.google.com/p/as3-arduino-connector/wiki/Introduction) para la comunicación serial directa, pero tiene algunos problemas con el bloqueo en ciertas condiciones. Diego, ¿conseguiste trabajar en este ANE de serie directo? ¿puedes hacer que esté disponible para otros? ¡Gracias! – ericsoco

Respuesta

9

Puede ser necesario comprobar la casilla del paquete de extensión nativo para su (s) plataforma (s) de destino.

Vaya a:

Propiedades del proyecto -> Flex Build Embalaje -> Apple iOS (o Android, etc.)

Seleccione la pestaña de extensiones nativas y asegúrese de "paquete" está marcada.

+0

increíble amigo mío eres el mejor, ahórrame mucho tiempo perdido: D –

Cuestiones relacionadas