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

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

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

Регистрация: Dec 2008
Сообщений: 3
По умолчанию Array и Object при передаче через ExternalInterface

Добрый день,

у меня возникла проблема с передачей аргументов типа array и object из с++ приложения во флеш на AS3.

Код AS3:
public function xHandler(... args):void
		{
			output.appendText("Somthing Recieved!!!! \n");
			for (var i:uint = 0; i < args.length; i++) {
				output.appendText("Argument N" + i + ": " + args[i] + "\n");
			}
		}
При передаче простой строки все нормально, а вот если передается массив или объект, то начинается строгий мат.

Кстати, даже если передавать одну строку, то аргументов у функции становиться почему-то 3, первый и последний из которых undefined, а вот только 2ой тот который нужен.

Кто-нибудь сталкивался с такой проблемой? Как передать массив или объект во флеш?

Добавлено через 17 минут
Ошибка выдается следующая
Error #1086: The name method only works on lists containing one item.
at XMLList/http://adobe.com/AS3/2006/builtin::name()
at ()
at flash.external::ExternalInterface$/flash.external:ExternalInterface::_toAS()
at flash.external::ExternalInterface$/flash.external:ExternalInterface::_arrayToAS()
at flash.external::ExternalInterface$/flash.external:ExternalInterface::_toAS()
at flash.external::ExternalInterface$/flash.external:ExternalInterface::_argumentsToAS()
at flash.external::ExternalInterface$/flash.external:ExternalInterface::_callIn()
at ()

Старый 29.12.2008, 17:35
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 2  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Код AS3:
function myTrace(... args):void {
	for(var i:uint = 0; i < args.length; i++) {
		trace('args', args[i]);
	}
	trace('length:', args.length);
}
 
myTrace(new Array(1, 2, 3), {prop1:'pr1', prop2:'pr2', prop3:3.14}, 'hello', 'world', new Point(1, 10));
Собственно длину нормально показывает. Да и мата никакого не надблюдается...


Последний раз редактировалось Obi; 29.12.2008 в 17:37.
Старый 29.12.2008, 17:57
lebeg вне форума Посмотреть профиль Отправить личное сообщение для lebeg Найти все сообщения от lebeg
  № 3  
Ответить с цитированием
lebeg

Регистрация: Dec 2008
Сообщений: 3
Дело в том, что из с++ запросы приходят в виде:

<invoke name="functionName" returntype="xml">
<arguments>
... (individual argument values)
</arguments>
</invoke>

который по идее разбирается средствами ExternalInterface...

Добавлено через 5 минут
Код AS3:
if (ExternalInterface.available) {
  ExternalInterface.addCallback("x", xHandler);
} 
public function xHandler(... args):void
{
  output.appendText("Somthing Recieved!!!!\n");
  for (var i:uint = 0; i < args.length; i++) {
    output.appendText("Argument N" + i + ": " + args[i] + "\n");
  }
}
в CallFunction передается
Код:
<invoke name="x" returnType="xml" >
 <arguments>
  <array> 
   <property id="0" > 
    <string>sdfsdf</string>
   </property>
   <property id="1" >
    <string>sadfsdfgsdfg</string>
   </property>
  </array>
 </arguments> 
</invoke>

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Похоже что вы сами пытаетесь создать этот ХМЛ? Я прав? Если да, то ошибка вам говорит о следующем:
вы неправильно составили ХMLList, и в нем не должно быть больше 1 топ элемента.
Т.е.:
Код AS3:
var foo:XMLList = 
<a/> +
<b/>;
trace(foo[0].name());
Если вы уберете [0] то получите ту же ошибку.
__________________
Hell is the possibility of sanity

Старый 30.12.2008, 12:18
lebeg вне форума Посмотреть профиль Отправить личное сообщение для lebeg Найти все сообщения от lebeg
  № 5  
Ответить с цитированием
lebeg

Регистрация: Dec 2008
Сообщений: 3
Большое спасибо за предыдущий совет! Он открыл мне глаза на то, что действительно происходило - дело в сторонней библиотеке (Qt), которая неправильно передает параметры в контейнер. Даже баг уже такой на оф.сайте занесен... )

Старый 26.01.2009, 18:19
litebox вне форума Посмотреть профиль Отправить личное сообщение для litebox Найти все сообщения от litebox
  № 6  
Ответить с цитированием
litebox
 
Аватар для litebox

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
возникла аналогичная проблема, но при попытке передачи из C++ во флэш данных в виде XML.
Получается (если верить lebeg), что при передаче во флэш, данные приводятся к такому формату:
Код:
<invoke name="functionName" returntype="xml">
  <arguments>
    <data_xml></data_xml>
  </arguments>
</invoke>
так?

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

Теги
c++ , externalinterface

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

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


 


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


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