我在Windows窗体中嵌入了Flash影片(使用"Visual Studio 8附带的Shockwave Flash对象"组件.)Flash影片是使用Flash CS4创建的,并使用ActionScript 3.
是否可以使用C#调用返回值的Flash影片中的ActionScript函数?
另外,我的Flash影片是否可以在主应用程序中调用返回值的C#函数?
为了使ActionScript函数可以从Flash播放器的主机调用,您必须使用ExternalInterface.addCallback函数,例如:
ExternalInterface.addCallback("testCallback", function (text : String) : String { var helloText : String = "Hello, " + text; myTextField.text = helloText; return helloText; });
要在C#中使用Windows窗体应用程序调用此函数,必须使用Flash播放器组件公开的CallFunction方法.该方法有一个字符串参数,该参数必须包含描述调用的XML; 它返回一个字符串,其中包含一个描述返回值的XML.使用上面的示例,这将是调用testCallback函数的方法:
textBox1.Text = flash.CallFunction(""); " + textBox1.Text + "
假设您的文本框(textBox1)包含文本"World",在执行上面的代码时,它将包含文本"Hello,World".
如果你想从Flash调用C#代码,故事就是这样的:你必须为你的Flash播放器的FlashCall事件定义一个事件处理程序.然后,您将使用ActionScript中的以下类型的调用:
ExternalInterface.call("MyCSharpFunction", 17);
这将使Flash播放器引发FlashCall事件并调用您的事件处理程序.处理程序接收的事件参数有一个名为"request"的公共字段,其类型为字符串.请求字段包含一个XML,用于描述从Flash进行的调用.对于上面使用的示例,它看起来像这样:
17
如果您希望返回一个值,您在FlashCall事件处理程序中所要做的就是在事件处理程序返回之前调用Flash播放器的SetReturnValue方法,并使用描述返回值的XML传递字符串,例如:
Works like a charm!