5

Ho un errore che non capisco perché compaiono, il più strano è che capita a volte ma ultimamente accade sempre, il codice che uso è lo stesso e non ho apportato alcuna modifica ad esso, in effetti non eseguo alcun codice all'inizio dell'applicazione, utilizzo i pulsanti, quindi non ho motivo di errore per favore aiutatemi, l'errore è una finestra di dialogo che dice:Flash Builder 4.6 Estensione nativa Errore

Estensione nativa Errore: c'è l'imballaggio errori/warning. Controllare ciascuna estensione nativa nella pagina di imballaggio Flex Build per ciascuna piattaforma di destinazione. Vuoi continuare?

E quando clicco sì il programma non comincia, il debbuger mi mostra la linea:

[SWF] SerialCOMGame.swf - 2,121,630 byte dopo la decompressione

ma mai iniziare, sto usando biblioteca RS232 per comunicazione seriale, prima di ottenere questo errore questo lavoro bene, ma io non so cosa succede, il mio codice C è:

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

E questo è il mio codice ActionScript che utilizzano il codice nativo 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

mi piace l'aspetto di questo ... stato utilizzando ArduinoConnector (http://code.google.com/p/as3-arduino-connector/wiki/Introduction) per la comunicazione seriale diretta ma presenta alcuni problemi con l'arresto anomalo in certe condizioni. diego, hai fatto funzionare questo ANE seriale diretto? puoi renderlo disponibile per gli altri? Grazie! – ericsoco

risposta

9

Potrebbe essere necessario selezionare la casella di controllo del pacchetto di estensione nativo per le piattaforme di destinazione.

Passare a:

Progetto Proprietà -> Flex Packaging Costruire -> Apple iOS (o Android, ecc)

Selezionare la scheda Estensioni native e assicurarsi che "pacchetto" è selezionata.

+0

fantastico amico mio sei il migliore, risparmiavi molto tempo perso: D –

Problemi correlati