我是 ActionScript 的新手,正在尝试在 AS 和 C# 之间进行通信。我发现的每个教程/解释似乎都完全相同,但我根本无法让它发挥作用。callFunction
抛出一个 COM 异常(“E_FAIL”),当我尝试ExternalInterface.call()
从 AS 调用时,它似乎从来没有。
我已经让它在 JavaScript/HTML 中工作,但我对 C# 没有想法;我怀疑我在我的 AS 中做错/不允许的事情。我用 Adobe Flex 4.6 和 mxmlc 编译 AS 文件。
编辑:为了澄清,这段代码只显示了从 AS 调用 C# 函数的测试,因为它似乎不太容易出错(不需要处理 xml 参数)。此外,我在我的 AS 中运行了一个while(true) ExternalInterface.call("someFct", "Hello world");
循环测试,调试过程的 CPU 使用率与 AS 中没有指令的情况基本相同(~0.3%)。所以看起来代码根本没有执行。
这是我的 AS 文件:
package
{
import flash.external.ExternalInterface;
public class Test
{
public function Test()
{
ExternalInterface.call("someFct", "Hello world");
}
}
}
在 C# 中,我在 WinForms 中有一个 AxShockwaveFlash 控件:
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.axShockwaveFlash1 = new AxShockwaveFlashObjects.AxShockwaveFlash();
((System.ComponentModel.ISupportInitialize)(this.axShockwaveFlash1)).BeginInit();
this.SuspendLayout();
//
// axShockwaveFlash1
//
this.axShockwaveFlash1.Enabled = true;
this.axShockwaveFlash1.Location = new System.Drawing.Point(104, 67);
this.axShockwaveFlash1.Name = "axShockwaveFlash1";
this.axShockwaveFlash1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axShockwaveFlash1.OcxState")));
this.axShockwaveFlash1.Size = new System.Drawing.Size(574, 314);
this.axShockwaveFlash1.TabIndex = 0;
this.axShockwaveFlash1.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(this.recv);
this.Click += new System.EventHandler(this.Form1_Click);
//...
((System.ComponentModel.ISupportInitialize)(this.axShockwaveFlash1)).EndInit();
this.ResumeLayout(false);
}
初始化 SWF 对象并接收其调用:
private void Form1_Click(object sender, EventArgs e)
{
axShockwaveFlash1.LoadMovie(0, @"mypath\test.swf");
}
//Never executes
public void recv(object sender, _IShockwaveFlashEvents_FlashCallEvent e)
{
string s = e.request;
}