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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

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

Регистрация: Mar 2006
Сообщений: 72
Отправить сообщение для werdn с помощью ICQ
По умолчанию Проблемы с externalinterface

Встроил ролик в программу на Delphi через ActiveX-компонент.
Вызываю следующую функцию (на haxe):
Код:
private function ExGetCamList():Xml
{
	var s:Xml = Xml.createElement('root');
	var i:MyCam;
	for(i in cameras)
	{
		var c:Xml;
		c = Xml.createElement('cam');
		c.set("x", Std.string(i._x));
		c.set("y", Std.string(i._y));
		c.set("name", i.caption);
		
		s.addChild(c);
	}
	trace(s.toString());
	return s;
}
следующим образом:
Код:
  s := ShockwaveFlash1.CallFunction(
    '<invoke name="GetCamList" resulttype="xml"></invoke>');
  ShowMessage(s);
ShowMessage пишет "Undefined", trace пишет нормальный код XML, после этого программа на Flash терпит крах и не работает (все видно, но ни события, ни что другое не работает).
Как в анекдоте: "Что я делаю неправильно?".
заранее благодарю.

Старый 04.06.2007, 12:20
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Во Flash есть класс XML, но никак не «Xml». Приведенный код неверен.

Вы пытаетесь вызвать функцию с именем GetCamList, а описываете ExGetCamList?

Старый 04.06.2007, 12:45
werdn вне форума Посмотреть профиль Отправить личное сообщение для werdn Найти все сообщения от werdn
  № 3  
Ответить с цитированием
werdn
 
Аватар для werdn

Регистрация: Mar 2006
Сообщений: 72
Отправить сообщение для werdn с помощью ICQ
Цитата:
Сообщение от __etc
Во Flash есть класс XML, но никак не «Xml». Приведенный код неверен.

Вы пытаетесь вызвать функцию с именем GetCamList, а описываете ExGetCamList?
1. это в AS - XML, а в haxe - Xml.
2. Я вызываю AddCallBack():
Код:
var methodName:String = "GetCamList";
var instance:Dynamic = null;
var method:Dynamic = ExGetCamList;

trace("Добавление внешней функции: " + methodName);

var wasSuccessful:Bool = ExternalInterface.addCallback(methodName, instance, method);
		
trace("Результат: " + wasSuccessful);
Функция вызывается, но падает программа на Flash написанная

Старый 21.06.2007, 02:58
WGR вне форума Посмотреть профиль Отправить личное сообщение для WGR Посетить домашнюю страницу WGR Найти все сообщения от WGR
  № 4  
Ответить с цитированием
WGR
 
Аватар для WGR

Регистрация: Apr 2007
Адрес: Мишень на карте России
Сообщений: 95
Собственно вот из семплов которые идут с компонентом

во флеше пишем функцию которую в дальнейшем вызовем из делфи
Код:
import flash.external.*;

ExternalInterface.addCallback("CallMeFromApplication", this, InternalFunction);

function InternalFunction(str: String): String {
	TextArea1.text = str;
	return "The function was called successfully";
}
из делфи вызываем так
и получаем ответ от флеша
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
   Response: WideString;
begin
   Response := FlashPlayerControl1.CallFunction('<invoke name="CallMeFromApplication" returntype="xml"><arguments><string>Some text for TFlashPlayerControl</string></arguments></invoke>');
   ShowMessage(Format('The function returned: %s', [ Response ] ));
end;


и ещё
вариант
во флешке на кнопке
Код:
on (click) {_root.TextArea1.text =flash.external.ExternalInterface.call("SomeFunction");
}
в делфе (родимой)
в событии onflashcalll
Код:
procedure TForm1.FlashPlayerControl1FlashCall(ASender: TObject;
  const request: WideString);
begin
FlashPlayerControl1.SetReturnValue('<string>Current time is: ' + TimeToStr(Time) + #13#10 + 'This info is returned by TMainForm.FlashPlayerControl1FlashCall()</string>');
end;

PS кто ищет тот найдёт!
__________________
Lepricon Flash ICQ

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

Регистрация: Mar 2006
Сообщений: 72
Отправить сообщение для werdn с помощью ICQ
Благодарю, но я немного не это спрашивал.
Все это ясно, но не ясно, что нужно возвращать из функции, returntype, которой установлен в xml???
Когда возвращаю экземпляр класса Xml в haxe приходит кирдык программе в ролике.

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

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Попробуйте String возвращать.

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

Регистрация: Mar 2006
Сообщений: 72
Отправить сообщение для werdn с помощью ICQ
Так и делаю. Благодарю за ответы.

Старый 13.07.2007, 12:52
Cheburah вне форума Посмотреть профиль Отправить личное сообщение для Cheburah Найти все сообщения от Cheburah
  № 8  
Ответить с цитированием
Cheburah
 
Аватар для Cheburah

Регистрация: Nov 2006
Сообщений: 26
У меня проблема с тем же ExternalInterface. Внедряю flash ActiveX компонент в приложение VC++ через MFC. ExternalInterface.call() прекрасно работает, а вызов функции AS из контейнера - ни в какую.
Код AS:
Код:
function cally():String
	{
		return "callys invoke";
	}

ExternalInterface.addCallback("ska",cally);
C++:
Код:
m_flObj.CallFunction("<invoke name=\"ska\" returntype=\"xml\"><arguments><null/></arguments></invoke>");
При вызове вылетает пустое окно ошибки.

Старый 15.07.2007, 01:06
Dr.OH вне форума Посмотреть профиль Отправить личное сообщение для Dr.OH Найти все сообщения от Dr.OH
  № 9  
Ответить с цитированием
Dr.OH

Регистрация: Aug 2003
Сообщений: 299
Отправить сообщение для Dr.OH с помощью ICQ
извини, конечно, чебуратор, за мои сомнения, но ты точно во флэшке не забыл написать примерно следующее:
Код:
import flash.external.*;

var methodName:String = "ska";
var instance:Object = null;
var method:Function = cally;
var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method);
потому что флэш крайне капризный чувак, если вдруг что не так, сразу вылетает с exeption'ом. Кстати, тебе офигенно повезло, у меня он в свое время даже окошка не выдавал, т.е. С'шный код нормально работал дальше, а флэш не реагировал
А так вроде бы все правильно... <null/> писать совсем не обязательно.

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

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

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


 


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


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