Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   ExternalInterface && C++ flash->CallFunction Crash ((( (http://www.flasher.ru/forum/showthread.php?t=148369)

easy.proger 29.12.2010 07:27

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

alexcon314 29.12.2010 08:51

Цитата:

_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 если что.

easy.proger 29.12.2010 09:34

все так же RTE ((( видимо IE плохо дружит с таким обращением (((

medvedya2 10.01.2011 20:44

не стал создавать тему,
у меня похожи вопрос.
Как на c# передать через com, флешки массив байт? желательно не при помощи tcp.

alexcon314 11.01.2011 09:50

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


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

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