Ответ 1
Чтобы сделать функцию ActionScript вызываемой с вашего хоста Flash Player, вы должны использовать функцию ExternalInterface.addCallback, например:
ExternalInterface.addCallback("testCallback", function (text : String) : String
{
var helloText : String = "Hello, " + text;
myTextField.text = helloText;
return helloText;
});
Чтобы вызвать эту функцию из приложения Windows Forms на С#, вам необходимо использовать метод CallFunction, открытый компонентом Flash Player. Метод имеет один строковый аргумент, который должен содержать XML, который описывает вызов; он возвращает строку, которая содержит XML, который описывает возвращаемое значение. Используя приведенный выше пример, это будет способ вызова функции testCallback:
textBox1.Text = flash.CallFunction("<invoke name=\"testCallback\" returntype=\"xml\"><arguments><string>" + textBox1.Text + "</string></arguments></invoke>");
Предположим, что ваше текстовое поле (textBox1) содержит текст "World", после выполнения вышеописанного кода будет содержаться текст "Hello, World".
Если вы хотите вызывать код С# из Flash, история похожа: вам нужно определить обработчик события для Flash Player Flash Player. Затем вы должны использовать следующий тип вызова из ActionScript:
ExternalInterface.call("MyCSharpFunction", 17);
Это заставит Flash-плеер поднять событие FlashCall и вызвать обработчик событий. Аргумент события, получаемый вашим обработчиком, имеет общедоступное поле под названием "запрос", тип которого является строкой. Поле запроса содержит XML, который описывает вызов, сделанный из Flash. В приведенном выше примере это будет выглядеть так:
<invoke name="MyCSharpFunction" returntype="xml"><arguments><number>17</number></arguments></invoke>
Если вы хотите вернуть значение, все, что вам нужно было бы сделать в обработчике событий FlashCall, - вызвать метод SetReturnValue Flash Player до того, как обработчик события вернется, передав ему строку с XML, который описывает возвращаемое значение, например
<string>Works like a charm!</string>