1

これをVb.netで作成する必要があることはわかっていますが、私自身の理由で、C#.netFramework3.5のComオブジェクトに対して遅延バインディングを試みています。発生するエラーは「DISP_E_BADCALLEE」であり、必要なコピーバックがtrueに設定されている場合にのみ発生します。私はセキュリティの問題に取り組んでいますか?私の調査では、AssemblyInfoファイルに「[assembly:AllowPartiallyTrustedCallers()]」をドロップしてみましたが、うまくいきませんでした。以下のコードの要約バージョンにいくつかの詳細を落としました。4番目のステップで失敗しています。よろしくお願いします。ありがとう。

                //step 1
        _atlDirectorObject = Activator.CreateInstance(Type.GetTypeFromProgID("atlDirectorObject.atlDirector"));
        //step 2
        object[] parms = { "3270", 1, true, true, 0, _atl3270Tool, _ErrMsg };
        Boolean[] CopyBack2 = new Boolean[7];
        CopyBack2[5] = true;  //atl3270Tool
        CopyBack2[6] = true;  //ErrMsg

        Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(_atlDirectorObject, _atlDirectorObject.GetType(), "CreateTool", parms, null, null, CopyBack2, false);
        _atl3270Tool = parms[5];


        //step 3
        // now using _atl3270Tool we navigate mainframe screens
        object[] parms3 = { Screen, SubScreen, _Number, _ErrMsg };
        Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(_atl3270Tool, _atl3270Tool.GetType(), "ShowScreen", parms3, null, null, null, false);

        //>>>>>>>>>>>>>>CODE FAILS ON THIS STEP<<<<<<<<<<<<
        //step 4
        Boolean[] CopyBack4 = new Boolean[5];
        CopyBack4[3] = true; //screentext
        CopyBack4[4] = true; //_errmsg
        object ScreenText = String.Empty;
        object[] parms4 = { Row, Col, Length, ScreenText, _ErrMsg};
        Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(_atl3270Tool, _atl3270Tool.GetType(), "ReadScreen", parms4, null, null, CopyBack4, false)

        // if it were working the code would read screen data into parms4[3] object
        // If CopyBack4[3 and/or 4] are set to true = error 
        // Is just CopyBack4[0,1,2] are true = no error but no result           
        //Errors out with "Invalid callee. (Exception from HRESULT: 0x80020010 (DISP_E_BADCALLEE))"


        return Convert.ToString(parms4[3]);
4

1 に答える 1

0

ScreenTextは、string.emptyではなくnullに設定する必要があります

于 2012-06-15T22:06:29.757 に答える