1

HRESULT E_FAIL尝试访问 AS3 .swf 文件中的方法时出现错误,该文件作为 Winform 内的 AxShockwaveFlashObject 组件运行。flash 组件可以通过 Externalinterface 与 C# 进行通信,但是从 C# 发送到 Flash 到目前为止是不可能的。

该错误似乎是通用且毫无意义的,因为我发现了许多未回答的问题。尽管如此,我仍会尝试针对这种特定情况:

C#

String method = "<invoke name=\"NewFilename\" returntype=\"xml\"></invoke><arguments></arguments>";
mainFlashControl.CallFunction(method);

AS3

public function Main():void 
{
    if (stage) init();
    else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void 
{
    removeEventListener(Event.ADDED_TO_STAGE, init);
    if (ExternalInterface.available)
    {
        ExternalInterface.addCallback("NewFilename", NewFilename);
    }   
}

public function NewFilename():void
{
    // Do Something...
}

更新:我所能找到的只是一种解决方法,它通过调用(从 AS3 到 C#)并读取响应来检查每个时间间隔是否有任何等待调用的函数。但是,我也无法得到返回任何东西的响应。我使用过flashComponent.setResponseValue("test");,在闪存端,Externalinterface.Call() 总是返回 null。

更新:我现在也研究了 FSCommand,也可以从 AS3 到 C#,但我似乎也没有办法将返回值附加到它......

4

1 回答 1

1

让它工作。我想它需要一个参数才能起作用:

C#

        String method = "<invoke name=\"NewFilename\" returntype=\"xml\"><arguments><string>"+sfd.FileName+"</string></arguments></invoke>";
        mainFlashControl.CallFunction(method);

AS3

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        _mainState = new MainState();
        addChild(_mainState);
        _editState = new EditState();
        addChild(_editState);
        _selectKeyState = new SelectKeyState();
        addChild(_selectKeyState);

        if (ExternalInterface.available)
        {
            ExternalInterface.addCallback ("NewFilename",NewFilename);
        }   
    }


    public function NewFilename(s:String):Boolean
    {
        _mainState.visible = false;
        var th:TextHandle = new TextHandle(s, 100);
        th.y = 200;
        this.addChild(th);
        return true;
    }
于 2012-12-05T04:22:58.030 回答