![]() |
Как подключить класс из swf на этапе выполнения?
При загрузке одного swf в другой (лоадер+апликэйшн домейн) его класс не определяется как класс на этапе компиляции. (Type was not found or was not a compile-time constant: Slut)
Код:
...use network services: false, фактически это пример использования метода из загруженного swf из документации adobe... Вопрос: что не так с настройками FlashDevelop? Или нужно что-то прописать в Slut? дополнение: остальные примеры с applicationDomain из документации также не работают (по другому - другие ошибки, но принцип тот же - не видит Slut как класс). Добавлено через 30 часов 56 минут итерационным методом был получен следующий результат: Код:
var mySlut:*= new Sluts();кроме того, в заголовке класса Slut установлено: Код:
/** |
Код AS3:
|
Посмотрите вот эту тему: http://www.flasher.ru/forum/showthread.php?t=144282
Ну и почитайте про политики безопасности, все дело в них. |
Вложений: 1
Sluts :)
|
я всегда использую getDefinitionByName, попробуй с ним
|
Проблема была в том, что фд не принимал класс из загруженной свф-ки.
А сейчас он перестал понимать нормальный код и начал выдавать совершенно причудливые ошибки, при каждой попытке компиляции разные. Пришлось его снести. Поэтому текущий вопрос такой: как установить пятый Флешдевелоп в стэндалоне режиме? Не могли бы благородные доны и доньи подсказать толковые гайды и доки по настройке ФДшечки? Спасибо. p.s.:класс слут был назван столь причудливо не только из фривольных соображений, но дабы обеспечить уникальность именования оного. |
Если вопрос, про определение классов кодом, то нужно компилисть внешний проект в swf и swc. Далее подключать swc (Правой кнопкой > Add to library), а затем в настройках выбирать External Library (Правой кнопкой > опции). И грузить swf в текущий ApplicationDomain
|
Вопрос уже про настройку\переустановку Flashdevelop, потому что он уже находит ошибку в таком коде:
Код:
var timer:Timer; |
Вряд ли дело в FD. Скорее всего Flex / AIR sdk подключен не правильно
кстати система случайно не 8ка 64 битная? |
Цитата:
|
Всё верно, продолжил, надо было курить доки, но после переустановки по крайней мере одни и те же ошибки.
Со стэндалоне режимом разобрался - фд в нём надо запускать от имени администратора, библиотеки, есс-но, подключил нормально и дебажный плеер тоже. Джава 1.6 32б, да, но это так и было. По теме. Взял пример из документации адобе, ApplicationDomainExample для того, чтобы он работал в заголовке надо прописать: //@mxmlc -static-link-runtime-shared-libraries = true; иначе не подгружает свф, а в classLoadedHandler Код:
var greeter:* = new runtimeClassRef();Но вот так всё работает. какую нибудь документацию по компилятору бы... |
Цитата:
Цитата:
|
AsCen Veddge, определитесь пожалуйста с вопросом. Тема называется "как подключить класс на этапе выполнения", но Вы с самого начала постоянно пишете про ФД, компилятор и прочее, не имеющее ровным счетом никакого отношения к рантайму. И ответы получаете соответствующие.
При чем здесь, по-вашему, компилятор, доки по нему, настройки ФД, стендалон и прочие права администратора? Вы чего добиться то хотите? Чтобы компилятор как ни в чем ни бывало воспринимал в коде класс, которого НЕТ на этапе компиляции? Так этого не будет. Либо динамика и определение типов через звездочку, либо общий интерфейс, но в любом случае, если Вам нужно именно создавать новые экземпляры, то сохраняете ссылку от getDefinitionByName в переменную типа :Class и дальше через new. Но переменная для хранения экземпляра, конечно же, не может быть объявлена компилятору как класс, которого НЕТ. Этого Вы не получите никак. Есть еще другой способ — завести в загружаемой swf метод, возвращающий экземпляр класса, который определен в этой swf. Но, опять же, загрузчик не будет "знать" тот класс, который в него не вкомпилирован, и для вызова методов и обращения к свойствам Вам придется опустить тип до Object или *. Если хочется красивого кода, то определите общий интерфейс — интерфейсы сравниваются по содержанию. |
Понимаете, без строчки
Код:
//@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 По идее надо создавать отдельный топик, но я ещё не пробовал это в коде, поэтому пока тут, ок? |
Вложений: 1
Простой пример без всяких перестроек.
|
Цитата:
|
| Часовой пояс GMT +4, время: 11:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.