|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2010
Сообщений: 21
|
невозможно преобразовать класс к интерфейсу
У меня есть 3 проекта: в первом определен интерфейс (компилируется в swc), во втором есть реализация этого интерфейса (swf), а третий проект лоадер, грузит второй с помощью Loader'а. фишка в том, что я не могу кастить loader.content (этот объект реализует интерфейс) к моему интерфейсу. кидается error.
Что можно сделать? Мне нужно, чтобы я смог кастить мой объект к моему интерфейсу, и при этом чтобы объект, который реализует интерфейс был в другой swf, чем тот в которой этот интерфейс используется. |
|
|||||
Modus ponens
|
Скорее всего интерфейс существует в обоих application domain, т.е. класс, который нужно приводить не находится в том же домейне, что и интерфейс, к которому вы его приводите. Попробуйте грузить все в один и тот же домейн, или дочерний домейн.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Jun 2010
Сообщений: 21
|
пробовал грузить и в тот и в другой. Нифига, не приводится
Добавлено через 26 минут грузить в дочерний домен - означает, что var loadContext:LoaderContext = new LoaderContext(); loadContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); ? |
|
|||||
Modus ponens
|
Да, это дочерний домейн.
Ну значит интерфейсы наверное разные. попробуйте не компилировать его в SWC, а вместо этого -load-externs его, чтобы в загружаемой флешке его вообще не было.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Jun 2010
Сообщений: 21
|
я тут обноружил одну интересную вещь, у меня definition в загружаемой библиотеки не виден. то есть интерфейс IA из загружаемой библиотеки просто нельзя получить из домена загружаемой swf. В хосте все есть. Я декомпильнул - вроде все есть, но при получении интерфейса падает с ошибкой. Хотя рядом лежит простой класс и его хост видит. Может какая-то фигня с интерфейсами?
Добавлено через 20 минут После полдня мучания проблемы я не могу получить definition ни одного класса из загружаемой swf |
|
|||||
Регистрация: Jun 2010
Сообщений: 21
|
в обработчике STAGE_ADDED
loaderInstance = new Loader(); var loadContext:LoaderContext = new LoaderContext(); loadContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); //loadContext.applicationDomain = ApplicationDomain.currentDomain; loaderInstance.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); loaderInstance.contentLoaderInfo.addEventListener(Event.INIT, onInit); loaderInstance.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); loaderInstance.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError); loaderInstance.load(new URLRequest(gameURL), loadContext); addChild(loaderInstance); private function onComplete(event : Event) : void { var curDomainEvent:Class = getDefinitionByName("game.GameParams") as Class; var classGameEvent:Object = loaderInstance.loaderInfo.applicationDomain.getDefinition("interfaces.UserActionEvent"); var classGame:Object = loaderInstance.loaderInfo.applicationDomain.getDefinition("interfaces.IMainClass"); var thisclassGame:Class = ApplicationDomain.currentDomain.getDefinition("interfaces.IMainClass") as Class; //mainGameClass = IMainClass(loaderInstance.content); unsubscribeLoaderEvents(); //mainGameClass.addEventListener(UserActionEvent.USER_ACTION, onUserAction); } При попытке грузить с помощью URLLoader выдает SandboxSecurityError, типа грузим из другого домена, но на старте и в загружающей и в загружаемой swf есть строка Может это из-за секьюрити мне не удается получить дефинишины. Добавлено через 15 минут Вот такая ошибка Добавлено через 47 минут С загрузкой по getDefinitionByName рахзобрался. Нахрен не нужен этот метод если работаешь со внешней swf. нужно загружать с помощью ApplicationDomain Добавлено через 1 час 41 минуту короче получаются разные инстансы интерфейсов, которые в загружаемой swf и в лоадере, поэтому и нельзя привести. Получается на флэше невозможна нормальная реализация паттерна Factory, а жаль. Придется делать через жопу, то есть через динамические классы, что не есть гут. |
|
|||||
Modus ponens
|
Если вы грузите в дочерний домейн, то нужно еще и секьюрити домейн указать... я тут начинал делать таблицу когда и что с чем работает, но еще не закончил. И да, Security.allowDomain() вообще не влияет в таких ситуациях. Это маразм флеша, но вот так вот...
https://spreadsheets.google.com/pub?...VE&output=html
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 17.06.2010 в 14:05. |
|
|||||
.
|
Это разрешение разработчика на кросскриптинг
|
Часовой пояс GMT +4, время: 11:33. |
|
« Предыдущая тема | Следующая тема » |
|
|