Показать сообщение отдельно
Старый 02.10.2009, 19:13
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 10  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Ну, списки не очень различаются, плеер-то один и тот же...
Цитата:
я для вызова флэш функции использую CallFunction, и подписаное событие для получения ответа, такое взаимодействие везде описано как штатное,SetReturnValue не использовал.... везде AS3
Не очень понял, вроде CallFunction синхронный.
Цитата:
Еще сомнения...ExternalInterface.addCallback для всех функций делаю в конце точки входа, все открываемые функции находятся ниже, не может быть чего плохого?
Тоже поясните, плиз. Не догоняю...что за точка входа, какие функции и почему они ниже?
На выходных попробую потерзать res.exe. Будет что-то интересное, отпишусь.

UPD:
Сделал пример с AS 3.0.
При старте имеем 17'560 Кб. Лики больше и чаще на SetReturnValue, FlashCall тоже течет, но процентов на 70% умереннее, на глаз. После нескольких сотен (350~400)вызовов вперемешку, но с перевесом на SetReturnValue, имеем ~20'250Кб. Однако, в какой-то момент расход скачкообразно уменьшается до ~18'500Кб и после этого лики идут вяло и в большинстве гасятся.
С AS 2.0 - роликом на старте имеем 16'480 Кб. Лики идут примерно вровень на обоих вызовах, на ~ 450 вызовах вперемешку расход догнал до ~17'100. Дальнейшие лики почему-то практически не происходят.

Исходник поправил так, что CallFunction возвращает результат, происходит это синхронно, так что про события, повторюсь, не понял.
Код:
HRESULT  CFlashEventDispatch::FlashCall (_bstr_t request)
{
	//::MessageBox(NULL,request,L"FlashCall request",0);
	static int i = 0;
	CString msg = "<string>SetReturnValue rules ";
	CString t;
	t.Format(L"%d",i);
	_bstr_t ret = _bstr_t(msg+t+" times!</string>");
	HRESULT hr = m_spPlayer->SetReturnValue(ret);
	i++;
    return S_OK;
}
...
LRESULT CFlashHost::OnRButtonDown(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled)
{
	static int i = 0;
	CString msg = "<invoke name=\"newfunc\" returntype=\"xml\"><arguments><string>FlashCall rules ";
	CString t;
	t.Format(L"%d",i);
	_bstr_t res = m_spPlayer->CallFunction(_bstr_t(msg+t+" times!</string></arguments></invoke>"));
	//::MessageBox(NULL,res,L"CallFunction response",0);
	i++;
    return 0;
}
Да, почему в вашем списке подгруженных модулей Flash.ocx присутствует дважды?

res3.zip (c AS 3.0) положил рядом с обновленным res.zip (с мессаджбоксами) на народе там же в pub. Плеер 10а.


Последний раз редактировалось alexcon314; 05.10.2009 в 08:40.