Как хранить и использовать собственный исполняемый файл в SWC с AIR? - PullRequest
2 голосов
/ 27 октября 2011

Я занимаюсь разработкой приложения AIR. Это приложение нуждается в некоторых аппаратных доступах, которые невозможны с AIR. Я решил использовать класс NativeApplication в AIR, который запускает исполняемый файл C #. Затем приложение AIR и «собственное» приложение обмениваются данными со стандартным потоком вывода и стандартными входными потоками.

Немного так:

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

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()));
   }
}

Я поместил файл MyNativeExe.exe в каталог приложения, установил значение "extendedDesktop" в * -app.xml supportProfiles, и он отлично работает.

Теперь я хотел бы создать своего рода SWC-библиотеку AS3, которая встраивает MyNativeExe.exe и предоставляет класс AS3 для управления взаимодействием с MyNativeExe.exe. Поэтому я мог бы легко использовать эту работу в других проектах AIR, просто добавив файл SWC в виде библиотеки. Возможно, мне придется вручную добавить значение "extendedDesktop" в новые проекты AIR, но это не проблема.

И я застрял. Я могу встроить EXE-файл в SWC-файл, вручную выбрав ресурсы для встраивания в Flash Builder, но ...

  • он не будет автоматически вставляться в окончательный файл SWF, поскольку только SWF-файл объединяет только необходимые части файла SWF
  • , даже если это так (принудительное объединение с тегом [Embed], ...), как я могу получить доступ и выполнить встроенный EXE-файл? Для NativeProcessInfo.executable требуется объект File, а не поток байтов.

Единственная идея, которая у меня есть, - встроить EXE-файл с помощью [Embed], загрузить его как байтовый массив, создать новый файл с байтовым массивом в качестве данных, а затем выполнить файл. Я не знаю, работает ли это, но мне не нравится эта идея, поскольку она подразумевает дублирование EXE-файла.

У кого-нибудь есть идея?

Спасибо!

1 Ответ

1 голос
/ 27 октября 2011

Вы должны заглянуть в Air Native Extensions .Проще говоря, одной из новых функций в Air 3.0 стала возможность компилировать и связываться с пользовательскими языковыми расширениями прямо из эфира.Я не нашел пример использования C # напрямую, но на этой странице есть ссылка , чтобы работать с управляемым C ++.

...