Domanda

Ho un errore che non capisco perché apparire, il più strano è quello che accade a volte, ma ultimamente accade sempre, il codice che uso è lo stesso e non ho modifiche, in realtà non eseguo alcun codice nel Inizio dell'applicazione, uso i pulsanti, quindi non ho un motivo con questo errore per favore aiutami, l'errore è una finestra di dialogo che dice:

Errore di estensione nativo: ci sono errori/avviso di imballaggio. Controllare ogni estensione nativa nella pagina Flex Build Packaging per ciascuna piattaforma di destinazione. Vuoi continuare?

E quando faccio clic su Sì, il programma non avvia, il Debbuger mi mostra la riga:

Swf] serialcomgame.swf - 2.121.630 byte dopo la decompressione

Ma non iniziare mai, sto usando la libreria RS232 per la comunicazione seriale, prima di ottenere questo errore questo funziona bene ma non so cosa succeda, 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 utilizza il codice C nativo:

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;
        }
    }
}
È stato utile?

Soluzione

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

Navigare verso:

Proprietà del progetto -> Flex Build Packaging -> Apple iOS (o Android, ecc.)

Seleziona la scheda Extensions nativa e assicurati che "pacchetto" sia selezionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top