2 using System
.Threading
;
3 using System
.Runtime
.InteropServices
;
4 using System
.Runtime
.Remoting
;
5 using System
.Runtime
.Remoting
.Messaging
;
6 using System
.Runtime
.Remoting
.Proxies
;
8 class MyProxy
: RealProxy
{
9 readonly MarshalByRefObject target
;
11 public MyProxy (MarshalByRefObject target
) : base (target
.GetType())
16 public override IMessage
Invoke (IMessage request
) {
17 IMethodCallMessage call
= (IMethodCallMessage
)request
;
18 Console
.WriteLine ("Invoke " + call
.MethodName
);
20 Console
.Write ("ARGS(");
21 for (int i
= 0; i
< call
.ArgCount
; i
++) {
24 Console
.Write (call
.GetArgName (i
) + " " +
27 Console
.WriteLine (")");
28 Console
.Write ("INARGS(");
29 for (int i
= 0; i
< call
.InArgCount
; i
++) {
32 Console
.Write (call
.GetInArgName (i
) + " " +
35 Console
.WriteLine (")");
37 IMethodReturnMessage res
= RemotingServices
.ExecuteMessage (target
, call
);
39 Console
.Write ("RESARGS(");
40 for (int i
= 0; i
< res
.ArgCount
; i
++) {
43 Console
.Write (res
.GetArgName (i
) + " " +
46 Console
.WriteLine (")");
48 Console
.Write ("RESOUTARGS(");
49 for (int i
= 0; i
< res
.OutArgCount
; i
++) {
52 Console
.Write (res
.GetOutArgName (i
) + " " +
55 Console
.WriteLine (")");
61 public struct MyStruct
{
67 class R1
: MarshalByRefObject
{
69 public int test_field
= 5;
71 public virtual MyStruct
Add (int a
, out int c
, int b
) {
72 Console
.WriteLine ("ADD");
75 MyStruct res
= new MyStruct ();
84 public long nonvirtual_Add (int a
, int b
) {
85 Console
.WriteLine ("nonvirtual_Add");
92 delegate long RemoteDelegate2 (int a
, int b
);
99 MyProxy real_proxy
= new MyProxy (myobj
);
101 R1 o
= (R1
)real_proxy
.GetTransparentProxy ();
103 RemoteDelegate2 d2
= new RemoteDelegate2 (o
.nonvirtual_Add
);
106 IAsyncResult ar1
= d2
.BeginInvoke (2, 4, null, null);
107 lres
= d2
.EndInvoke (ar1
);