从C#调用ActionScript 3函数

15 c# flash actionscript-3 winforms

我在Windows窗体中嵌入了Flash影片(使用"Visual Studio 8附带的Shockwave Flash对象"组件.)Flash影片是使用Flash CS4创建的,并使用ActionScript 3.

是否可以使用C#调用返回值的Flash影片中的ActionScript函数?

另外,我的Flash影片是否可以在主应用程序中调用返回值的C#函数?

Voj*_*vic 26

为了使ActionScript函数可以从Flash播放器的主机调用,您必须使用ExternalInterface.addCallback函数,例如:

ExternalInterface.addCallback("testCallback", function (text : String) : String
{
    var helloText : String = "Hello, " + text;
    myTextField.text = helloText;
    return helloText;
});
Run Code Online (Sandbox Code Playgroud)

要在C#中使用Windows窗体应用程序调用此函数,必须使用Flash播放器组件公开的CallFunction方法.该方法有一个字符串参数,该参数必须包含描述调用的XML; 它返回一个字符串,其中包含一个描述返回值的XML.使用上面的示例,这将是调用testCallback函数的方法:

textBox1.Text = flash.CallFunction("<invoke name=\"testCallback\" returntype=\"xml\"><arguments><string>" + textBox1.Text + "</string></arguments></invoke>");
Run Code Online (Sandbox Code Playgroud)

假设您的文本框(textBox1)包含文本"World",在执行上面的代码时,它将包含文本"Hello,World".

如果你想从Flash调用C#代码,故事就是这样的:你必须为你的Flash播放器的FlashCall事件定义一个事件处理程序.然后,您将使用ActionScript中的以下类型的调用:

ExternalInterface.call("MyCSharpFunction", 17);
Run Code Online (Sandbox Code Playgroud)

这将使Flash播放器引发FlashCall事件并调用您的事件处理程序.处理程序接收的事件参数有一个名为"request"的公共字段,其类型为字符串.请求字段包含一个XML,用于描述从Flash进行的调用.对于上面使用的示例,它看起来像这样:

<invoke name="MyCSharpFunction" returntype="xml"><arguments><number>17</number></arguments></invoke>
Run Code Online (Sandbox Code Playgroud)

如果您希望返回一个值,您在FlashCall事件处理程序中所要做的就是在事件处理程序返回之前调用Flash播放器的SetReturnValue方法,并使用描述返回值的XML传递字符串,例如:

<string>Works like a charm!</string>
Run Code Online (Sandbox Code Playgroud)


Jam*_*Hay 1

ExternalInterface.addCallback(functionName:String,closure:Function):void 注册一个可从其容器调用的动作脚本方法。

我不确定它是否能够返回一个值。我的想法是这行不通。如果是这种情况,您可以执行另一个ExternalInterface.call,它将您想要的信息作为参数发送给容器。

我不知道如何实际从 C# 进行调用,但我看到我的一位同事为我们正在开发的闪存安装项目完成了这一操作,所以我知道这是可能的......有些方法!