Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как подключить класс из swf на этапе выполнения? (http://www.flasher.ru/forum/showthread.php?t=212326)

AsCen Veddge 03.02.2016 12:05

Всё верно, продолжил, надо было курить доки, но после переустановки по крайней мере одни и те же ошибки.
Со стэндалоне режимом разобрался - фд в нём надо запускать от имени администратора, библиотеки, есс-но, подключил нормально и дебажный плеер тоже. Джава 1.6 32б, да, но это так и было.

По теме.
Взял пример из документации адобе, ApplicationDomainExample
для того, чтобы он работал в заголовке надо прописать:
//@mxmlc -static-link-runtime-shared-libraries = true;
иначе не подгружает свф,
а в classLoadedHandler
Код:

var greeter:* = new runtimeClassRef();
гритер - класс из подгружаемый свф-ки и если его определить как runtimeClassRef, а не *, то компилятор говорит, мол, нет такого класса. ГетДифинишнБайНэйм я вообще не понял куда тут прикручивать.

Но вот так всё работает.

какую нибудь документацию по компилятору бы...

caseyryan 03.02.2016 13:13

Цитата:

Со стэндалоне режимом разобрался - фд в нём надо запускать от имени администратора, библиотеки, есс-но, подключил нормально и дебажный плеер тоже.
Совсем не обязательно. Это скорее ограничение винды. Чтобы писать данные в Program Files, нужны права администратора. FD можно установить не в Program Files, и права администратора не понадобятся
Цитата:

то компилятор говорит, мол, нет такого класса.
Значит его на самом деле нет. Если класс нигде не упомянут в проекте, то он не вкомпилируется. Это нормальное поведение компилятора.

Wolsh 03.02.2016 15:38

AsCen Veddge, определитесь пожалуйста с вопросом. Тема называется "как подключить класс на этапе выполнения", но Вы с самого начала постоянно пишете про ФД, компилятор и прочее, не имеющее ровным счетом никакого отношения к рантайму. И ответы получаете соответствующие.
При чем здесь, по-вашему, компилятор, доки по нему, настройки ФД, стендалон и прочие права администратора? Вы чего добиться то хотите? Чтобы компилятор как ни в чем ни бывало воспринимал в коде класс, которого НЕТ на этапе компиляции? Так этого не будет. Либо динамика и определение типов через звездочку, либо общий интерфейс, но в любом случае, если Вам нужно именно создавать новые экземпляры, то сохраняете ссылку от getDefinitionByName в переменную типа :Class и дальше через new. Но переменная для хранения экземпляра, конечно же, не может быть объявлена компилятору как класс, которого НЕТ. Этого Вы не получите никак.
Есть еще другой способ — завести в загружаемой swf метод, возвращающий экземпляр класса, который определен в этой swf. Но, опять же, загрузчик не будет "знать" тот класс, который в него не вкомпилирован, и для вызова методов и обращения к свойствам Вам придется опустить тип до Object или *. Если хочется красивого кода, то определите общий интерфейс — интерфейсы сравниваются по содержанию.

AsCen Veddge 06.02.2016 09:48

Понимаете, без строчки
Код:

//@mxmlc -static-link-runtime-shared-libraries = true;
в заголовке загрузчика
возникают следующие ошибки на этапе выполнения:

Error: Cannot load the specified file.
at ApplicationDomainExample/loadErrorHandler()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at ClassLoader/ioErrorHandler()

, так что настройки компилятора тут очень даже при чём.
Однако вопрос загрузки одной свф-ки считаю решённым.

Следующий вопрос будет: как организовать архитектуру приложения с несколькими подгружаемыми файлами и сокетами.
есть немного теории здесь: https://habrahabr.ru/post/276593/
И есть несколько топиков здесь, на flasher.ru
например вот: http://www.flasher.ru/forum/showthread.php?t=144282

По идее надо создавать отдельный топик, но я ещё не пробовал это в коде, поэтому пока тут, ок?

Wolsh 06.02.2016 10:52

Вложений: 1
Простой пример без всяких перестроек.

alatar 07.02.2016 20:04

Цитата:

Сообщение от Wolsh (Сообщение 1191521)
Либо динамика и определение типов через звездочку, либо общий интерфейс...

Ну, строго говоря, можно и класс использовать. Только его придется скомпилировать в swc, которую подключить как "external", а после запуска грузить swf с этим классом в предыдущий кадр, перед тем как он будет использоваться.


Часовой пояс GMT +4, время: 09:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.