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

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.12.2010, 07:27
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 1  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
По умолчанию ExternalInterface && C++ flash->CallFunction Crash (((

Привет ! вобщем

имеем не замысловатый код на С++
Код:
        static Flash::IShockwaveFlash*flash;
	if(FAILED(CoCreateInstance(__uuidof(Flash::ShockwaveFlash), NULL, CLSCTX_ALL, __uuidof(Flash::IShockwaveFlash), (void**)&flash))){
              return;
	}  
     if(FAILED(AtlAxAttachControl(flash, toolbarHandle, NULL))){
             flash->Release();
             return;
	}else{
		flash->LoadMovie(0, "C:\test.swf");
	}
    flash->DisableLocalSecurity();
Теперь, если попробовать по таймеру или сразу, не суть, вызвать flash->CallFunction("<invoke name='test'><arguments></arguments></invoke>")
происходит RTE в С++, если код вешать в тру кэтч и смотреть описание ошибки, то MS как обычно на высоте - "произошла не известная ошибка"

Может чего забыл ? кто в теме посоветуйте, во флеше есть ExternalInterface.addCallback("test",testHandler);, но мне кажется ( могу ошибаться ) просто попытка вызова метода на стороне флеша не должна выбивать RTE у С++ стороны

PS info:
- сама флешка написана на AS3
- код подписи на коллбэк лежит в обработчике ADDED_ON_STAGE
- кроме этого в коде не чего нету ( ну только обработчик этого коллбэка )
- сам проект - Plugin к IE, то есть это ATL DLL
- сама флешка нормально крутиться
- если вызывать ИЗ флеша ExternalInterface.call, все работает ! ( конечно кода для этого на стороне С++ требуется куда больше, но суть в том, что работает ! )
- как я понял setVariable на AS3 проектах не работает ? ( прочитал древний пост от etc )

проблему, конечно, можно решить написав на стороне флеша ExternalInterface.call("getMessage",peekMessage);, повесить в таймер, например срабатывающий каждую секунду, а на стороне С++ при вызове getMessage отдавать список сообщений, которые должен обработать флеш
но это криво


PSS2 если не туда запостил, поправьте, по описанию я незнаю какой раздел подходит..., по логике наверно этот, так как сама флешка на as3


Последний раз редактировалось easy.proger; 29.12.2010 в 07:40.
Старый 29.12.2010, 08:51
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
_bstr_t IShockwaveFlash::CallFunction ( _bstr_t request )
Всякие там СОМ-ы любят особый формат строк.
Я делал так:
Код:
m_spPlayer->CallFunction((_bstr_t("<invoke name=\"newfunc\" returntype=\"xml\"><arguments><string>bl-bla</string></arguments></invoke>"));
Код был на правой кнопке, работал на ура. Правда, в стандалоне-ехе.
_bstr_t в comutil.h если что.

Старый 29.12.2010, 09:34
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 3  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
все так же RTE ((( видимо IE плохо дружит с таким обращением (((

Старый 10.01.2011, 20:44
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 4  
Ответить с цитированием
medvedya2
[+1 09.03.11]

Регистрация: Mar 2010
Сообщений: 128
не стал создавать тему,
у меня похожи вопрос.
Как на c# передать через com, флешки массив байт? желательно не при помощи tcp.
__________________
for(;;);

Старый 11.01.2011, 09:50
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 5  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
ExternalInterface сериализует данные в XML, т.е. по-сути в обычную строку. Соответственно, десериализует тоже только из XML. Упаковать бинарные данные в строку можно разными способами, зачастую используют base64.
Т.е. на стороне c# пакуем bytearray->base64, сериализуем полученную строку в XML, согласно формату ExternalInterface, отдаем. Во флеше вынимаем строку, делаем обратное преобразование base64->bytearray. Как то так. Благо либы АС3 для работы с base64 имеются. Обратно из флэша в c# процедура передачи bytearray повторяется.
...
И вообще, ваш вопрос практически не соотносится с темой топика. Нужно было создать отдельный топ.


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

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

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


 


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


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