Просмотр полной версии : Проблемы с 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 терпит крах и не работает (все видно, но ни события, ни что другое не работает).
Как в анекдоте: "Что я делаю неправильно?".
заранее благодарю.
Во Flash есть класс XML, но никак не «Xml». Приведенный код неверен.
Вы пытаетесь вызвать функцию с именем GetCamList, а описываете ExGetCamList?
Во 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 написанная
Собственно вот из семплов которые идут с компонентом
во флеше пишем функцию которую в дальнейшем вызовем из делфи
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 кто ищет тот найдёт!
Благодарю, но я немного не это спрашивал.
Все это ясно, но не ясно, что нужно возвращать из функции, returntype, которой установлен в xml???
Когда возвращаю экземпляр класса Xml в haxe приходит кирдык программе в ролике.
Попробуйте String возвращать.
Так и делаю. Благодарю за ответы.
Cheburah
13.07.2007, 12:52
У меня проблема с тем же 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>");
При вызове вылетает пустое окно ошибки.
извини, конечно, чебуратор, за мои сомнения, но ты точно во флэшке не забыл написать примерно следующее:
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/> писать совсем не обязательно.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.