Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.06.2010, 15:23
SaloS вне форума Посмотреть профиль Отправить личное сообщение для SaloS Найти все сообщения от SaloS
  № 1  
Ответить с цитированием
SaloS

Регистрация: Jun 2010
Сообщений: 21
По умолчанию невозможно преобразовать класс к интерфейсу

У меня есть 3 проекта: в первом определен интерфейс (компилируется в swc), во втором есть реализация этого интерфейса (swf), а третий проект лоадер, грузит второй с помощью Loader'а. фишка в том, что я не могу кастить loader.content (этот объект реализует интерфейс) к моему интерфейсу. кидается error.
Что можно сделать? Мне нужно, чтобы я смог кастить мой объект к моему интерфейсу, и при этом чтобы объект, который реализует интерфейс был в другой swf, чем тот в которой этот интерфейс используется.

Старый 16.06.2010, 15:34
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Скорее всего интерфейс существует в обоих application domain, т.е. класс, который нужно приводить не находится в том же домейне, что и интерфейс, к которому вы его приводите. Попробуйте грузить все в один и тот же домейн, или дочерний домейн.
__________________
Hell is the possibility of sanity

Старый 16.06.2010, 17:33
SaloS вне форума Посмотреть профиль Отправить личное сообщение для SaloS Найти все сообщения от SaloS
  № 3  
Ответить с цитированием
SaloS

Регистрация: Jun 2010
Сообщений: 21
пробовал грузить и в тот и в другой. Нифига, не приводится

Добавлено через 26 минут
грузить в дочерний домен - означает, что
var loadContext:LoaderContext = new LoaderContext();
loadContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
?

Старый 16.06.2010, 19:17
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Да, это дочерний домейн.

Ну значит интерфейсы наверное разные.
попробуйте не компилировать его в SWC, а вместо этого -load-externs его, чтобы в загружаемой флешке его вообще не было.
__________________
Hell is the possibility of sanity

Старый 16.06.2010, 20:29
SaloS вне форума Посмотреть профиль Отправить личное сообщение для SaloS Найти все сообщения от SaloS
  № 5  
Ответить с цитированием
SaloS

Регистрация: Jun 2010
Сообщений: 21
я тут обноружил одну интересную вещь, у меня definition в загружаемой библиотеки не виден. то есть интерфейс IA из загружаемой библиотеки просто нельзя получить из домена загружаемой swf. В хосте все есть. Я декомпильнул - вроде все есть, но при получении интерфейса падает с ошибкой. Хотя рядом лежит простой класс и его хост видит. Может какая-то фигня с интерфейсами?

Добавлено через 20 минут
После полдня мучания проблемы я не могу получить definition ни одного класса из загружаемой swf

Старый 16.06.2010, 21:04
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Это заразно? )
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.06.2010, 01:28
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Показывайте код / код ошибки. Что-то у вас странное...
__________________
Hell is the possibility of sanity

Старый 17.06.2010, 10:22
SaloS вне форума Посмотреть профиль Отправить личное сообщение для SaloS Найти все сообщения от SaloS
  № 8  
Ответить с цитированием
SaloS

Регистрация: Jun 2010
Сообщений: 21
в обработчике STAGE_ADDED
Код AS3:
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);
Код AS3:
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 есть строка
Код AS3:
Security.allowDomain("*");
Может это из-за секьюрити мне не удается получить дефинишины.

Добавлено через 15 минут
Вот такая ошибка
Код:
Exception fault: ReferenceError: Error #1065: Variable GameParams is not defined.
Добавлено через 47 минут
С загрузкой по getDefinitionByName рахзобрался. Нахрен не нужен этот метод если работаешь со внешней swf.
нужно загружать с помощью ApplicationDomain
Код:
loaderInstance.contentLoaderInfo.applicationDomain.getDefinition("game.GameParams") as Class;
Добавлено через 1 час 41 минуту
короче получаются разные инстансы интерфейсов, которые в загружаемой swf и в лоадере, поэтому и нельзя привести. Получается на флэше невозможна нормальная реализация паттерна Factory, а жаль. Придется делать через жопу, то есть через динамические классы, что не есть гут.

Старый 17.06.2010, 14:03
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если вы грузите в дочерний домейн, то нужно еще и секьюрити домейн указать... я тут начинал делать таблицу когда и что с чем работает, но еще не закончил. И да, Security.allowDomain() вообще не влияет в таких ситуациях. Это маразм флеша, но вот так вот...
https://spreadsheets.google.com/pub?...VE&output=html
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 17.06.2010 в 14:05.
Старый 17.06.2010, 14:04
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Security.allowDomain() вообще не влияет в таких ситуациях. Это маразм флеша, но вот так вот...
Это разрешение разработчика на кросскриптинг
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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