Hoe een native uitvoerbaar bestand op te slaan en te gebruiken in een SWC met AIR?

Ik ben bezig met het ontwikkelen van een AIR-toepassing. Deze applicatie heeft hardware-toegang nodig die niet mogelijk is met AIR. Ik besloot om de klasse NativeApplication in AIR te gebruiken, die een uitvoerbaar bestand C# lanceert. De AIR-toepassing en de "native" -toepassing communiceren vervolgens met de standaarduitvoer en standaardinvoerstromen.

Een beetje zoals dat:

private var np:NativeProcess = new NativeProcess();
private var npi:NativeProcessStartupInfo = new NativeProcessStartupInfo();
private var args:Vector. = new Vector.();

private function creationCompleteHandler(event:FlexEvent):void {
   args.push("myCommand");
   args.push("myParameter");
   npi.arguments = args;
   npi.executable = File.applicationDirectory.resolvePath("MyNativeExe.exe");
   np.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onData);
   np.start(npi);
}

private function onData(e:ProgressEvent):void {
   while(np.standardOutput.bytesAvailable != 0) {
     trace(String.fromCharCode(np.standardOutput.readByte()));
   }
}

Ik zet het bestand MyNativeExe.exe in de toepassingsmap, stel de "extendedDesktop" -waarde in de * -app.xml supportedProfiles in, en het werkt prima.

Nu zou ik graag een soort AS3 SWC-bibliotheek willen maken die MyNativeExe.exe insluit en die een AS3-klasse biedt om de interactie met MyNativeExe.exe te beheren. Daarom zou ik dit werk gemakkelijk kunnen hergebruiken in andere AIR-projecten door eenvoudigweg het SWC-bestand toe te voegen als een bibliotheek. Mogelijk moet ik de waarde 'extendedDesktop' handmatig toevoegen aan de nieuwe AIR-projecten, maar dit is geen probleem.

En ik zit vast. Ik kan een EXE-bestand insluiten in een SWC-bestand door handmatig de bronnen te selecteren die moeten worden ingesloten met Flash Builder, maar ...

  • het wordt niet automatisch ingesloten in het uiteindelijke SWF-bestand, omdat alleen de benodigde delen van het SWC-bestand worden samengevoegd met de SWF
  • zelfs als dat zo is (afdwingen van de samenvoeging met een [Embed] -tag, ...), hoe kan ik het ingesloten EXE-bestand openen en uitvoeren? NativeProcessInfo.executable heeft een File-object nodig en geen bytestream.

Het enige idee dat ik heb is om het EXE-bestand in te bedden met [Embed], het als een bytearray te laden, een nieuw bestand met de bytearray als gegevens te maken en vervolgens het bestand uit te voeren. Ik weet niet of het werkt, maar ik vind het idee niet leuk, omdat het impliceert dat het EXE-type wordt gedupliceerd.

Heeft iemand een idee?

Dank je!

2

1 antwoord

Bekijk de Air Native Extensions . Simpel gezegd, een van de nieuwe functies in Air 3.0 was de mogelijkheid om rechtstreeks vanuit de lucht compilaties en links naar aangepaste taaluitbreidingen te maken. Ik heb geen voorbeeld gevonden van het rechtstreeks gebruiken van C#, maar er is een link op die pagina naar doen met managed C ++.

1
toegevoegd
Voor nu lijkt het erop dat het bouwen van een native extensie een beetje lastig is. Geen geautomatiseerd hulpmiddel, veel dingen om met de hand te doen of scripts om te schrijven. Het zou een oplossing kunnen zijn, maar voor nu ben ik nogal geïnteresseerd in een antwoord op de NativeProcess-manier en blijf op de hoogte van de tools die Flash Builder biedt :-)
toegevoegd de auteur Vincent Hiribarren, de bron
@VincentHiribarren als je geen ANE's gaat gebruiken, dan is je andere idee eigenlijk de enige manier om het te doen. Ik zou een tijdelijke map maken (met File.createTempDirectory() ) en vervolgens de ByteArray schrijven naar een bestand in die map en vervolgens de nieuwe NativeProcess de manier waarop je het doet. Zorg ervoor dat je die tijdelijke map opruimt als je klaar bent. Niet de mooiste oplossing, maar het zal werken.
toegevoegd de auteur James Holmes, de bron