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