私は ActionScript を初めて使用し、AS と C# の間で通信しようとしています。私が見つけたすべてのチュートリアル/説明はまったく同じように見えますが、それを機能させることはできません. callFunction
COM 例外 ("E_FAIL") をスローExternalInterface.call()
し、AS から呼び出しようとしても、決してそうではないようです。
これは JavaScript/HTML で動作するようになりましたが、C# のアイデアがありません。私は自分の AS で何か間違ったことをしている/許可されていないのではないかと疑っています。AS ファイルを Adobe Flex 4.6 と mxmlc でコンパイルします。
編集: 明確にするために、このコードは 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;
}