Вызов функции ActionScript 3 из C # - PullRequest
15 голосов
/ 23 января 2009

У меня есть Flash-фильм, встроенный в форму Windows (используется компонент «Shockwave Flash Object», включенный в Visual Studio 8). Flash-фильм был создан с помощью Flash CS4 и использует ActionScript 3.

Можно ли использовать C # для вызова функции ActionScript во Flash-ролике, которая возвращает значение?

Кроме того, возможно ли, чтобы мой Flash-фильм вызывал функцию C # в главном приложении, которое возвращает значение?

Ответы [ 3 ]

26 голосов
/ 23 января 2009

Чтобы сделать функцию 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>
1 голос
/ 29 ноября 2011

Пожалуйста, посмотрите приведенную ниже ссылку, вы найдете правильные решения для вашего вопроса. Ваше требование выполнит. Нажмите ее, чтобы получить решения

1 голос
/ 23 января 2009

ExternalInterface.addCallback (functionName: String, closure: Function): void регистрирует метод actionscript, который можно вызывать из его контейнера.

Я не уверен, сможет ли он вернуть значение. Я думаю, что это не сработает. Если бы это было так, вы могли бы просто сделать еще один ExternalInterface.call, который отправит контейнеру необходимую информацию в качестве аргумента.

Я не знаю, как на самом деле делать вызовы из C #, но я видел, как это сделал один из моих коллег для проекта установки флеш-памяти, над которым мы работали, поэтому я знаю, что это возможно ... кое-как!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...