Цитата:
|
Сообщение от IYAKOV
у меня получается, что при Любом вызове ExternalInterface.call, приложение обрабатывает событие axShockwaveFlash1_FlashCall.
|
Именно. Общение идет "реквестами" (request) - это xml примерно такого вида

Код:
<invoke name="sayHello" returntype="xml"><arguments><string>browser</string></arguments></invoke>
Вызывающий код во флэше:

Код:
ExternalInterface.call("sayHello", "browser");
В реквест можно запихать и Number и Array и Object.. в xml все будет разложено по полочкам-нодам. Осталось его распарсить....

Код:
//C# - код
private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
{
XmlDocument document = new XmlDocument();
document.LoadXml(e.request);
XmlNode invoke = document.FirstChild;
string func = invoke.Attributes.GetNamedItem("name").Value;
XmlNodeList list = document.GetElementsByTagName("arguments");
string arg = list[0].FirstChild.InnerText;
MessageBox.Show(e.request);
textBox.Text = "Function invoked: "+ func + ", argument: " + arg;
}
... и, используя конструкцию типа swich(){case...} вызвать нужную функцию в оболочке.
Цитата:
|
Сообщение от IYAKOV
Значит никак вызвать какую либо функцию из внешено приложения нельзя???
|
си-подобные языки, в т.ч. и C# не поддерживают такую фичу как вывзов функции по string-имени, получаемому из string-переменной. (динамическая типизация, кажется, это называется). Потому - вызов через свич. Можете придумать что-то поэлегантнее, если хочется.
Вызов каллбак-функции во флэше из оболочки тоже не представляет трудностей. Опять же, в качестве аргумента передавайте xml-request.
______________________________
По поводу
GetVariable. Значение поля AS-класса я не пробовал вытаскивать, но переменная прикрепленная к клипу на сцене (свойство клипа) вытаскивается легко (в AS2):
GetVariable("mc.my_varproperty"); На AS3 нет возможности проверить.
За безопасность не скажу, у меня все работало без дополнинтельных телодвижений. Просто впихивается флэш-контрол на форму и понеслось.