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 MyStruct
RemoteDelegate1 (int a
, out int c
, int b
);
98 MyProxy real_proxy
= new MyProxy (myobj
);
100 R1 o
= (R1
)real_proxy
.GetTransparentProxy ();
102 RemoteDelegate1 d1
= new RemoteDelegate1 (o
.Add
);
104 IAsyncResult ar
= d1
.BeginInvoke (2, out res
, 3, null, null);
105 MyStruct myres
= d1
.EndInvoke (out res
, ar
);
107 Console
.WriteLine ("Result: " + myres
.a
+ " " +
108 myres
.b
+ " " + myres
.c
+ " " + res
);