1

C# とフラッシュ オブジェクト (swf) の間で通信しようとすると、次の例外が発生します。Flash64_13_0_0_214.ocx を aximp して AxShockwaveFlash.dll と ShockwaveFlashObject.dll の 2 つのアセンブリを生成し、1 つのコンソール アプリケーションでコードをテストします。私のコードは一般的に次のようになります。

AxShockwaveFlash player = new AxShockwaveFlash();
player.CreateControl();
player.WMode = "transparent";
player.AllowScriptAccess = "sameDomain";
player.Loop = false;
player.LoadMovie(0, @"encrypt.swf");

LoadMovie をヒットした後、次のエラーが発生しました。

System.AccessViolationException は処理されませんでした HResult=-2147467261 Message=保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
Source=ShockwaveFlashObjects StackTrace: at ShockwaveFlashObjects.IShockwaveFlash.LoadMovie(Int32 layer, String url) at AxShockwaveFlashObjects.AxShockwaveFlash.LoadMovie(Int32 layer, String url) in c:\Windows\System32\AxShockwaveFlashObjects.cs:line 685 at TestActionScript2.Program. Main(String[] args) in c:\Something\trunk\Src\TestActionScript2\Program.cs:line 41 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態、ブール値 preserveSyncCtx) で System.Threading.ExecutionContext.Run(ExecutionContext 実行コンテキスト、ContextCallback コールバック、オブジェクト状態、System.Threading.ThreadHelper.ThreadStart() で System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態) で Boolean preserveSyncCtx)

助けてください~~

4

1 に答える 1

0

こんにちは、同じ問題が発生しましたが、このエラーは、フォームが読み込まれる前に LoadMovie を呼び出した場合にのみ発生することがわかりました。修正は、フォームの読み込み時にイベントを追加し、そこに Shockwaveflash を作成するコードを配置することでした。

あなたの場合:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.Load += new System.EventHandler(this.Form_Load);
    }

    private void Form_Load(object sender, EventArgs e)
    {
        AxShockwaveFlash player = new AxShockwaveFlash();
        player.CreateControl();
        player.WMode = "transparent";
        player.AllowScriptAccess = "sameDomain";
        player.Loop = false;
        player.LoadMovie(0, @"encrypt.swf");
    }
}
于 2015-02-25T10:24:17.730 に答える