これを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]);