RetroZilla/extensions/mono/test/test-invoke.cs
2015-10-20 23:03:22 -04:00

62 lines
1.6 KiB
C#

using System;
using System.Runtime.InteropServices;
using Mozilla.XPCOM;
using MethodDescriptor = Mozilla.XPCOM.TypeInfo.MethodDescriptor;
public class Test
{
[DllImport("xpcom-dotnet.so")]
static extern int StartXPCOM(out IntPtr srvmgr);
static IntPtr srvmgr;
[DllImport("test.so", EntryPoint="GetImpl")]
public static extern IntPtr GetTestImpl();
public static int xptinfo_test(string[] args)
{
int index = Int32.Parse(args[2]);
MethodDescriptor meth = TypeInfo.GetMethodData(args[1], index);
Console.WriteLine("{0}#{1}: {2}", args[1], index, meth.ToString());
return 0;
}
public static int xptinvoke_test_cb()
{
object o = new object();
IntPtr impl = GetTestImpl();
Invoker.Invoke(impl, "test", "callback", o);
return 0;
}
public static int xptinvoke_test_add(string[] args)
{
int a = Int32.Parse(args[1]);
int b = Int32.Parse(args[2]);
IntPtr impl = GetTestImpl();
Invoker.Invoke(impl, "test", "add", a, b);
return 0;
}
public static int Main(string[] args)
{
int res = StartXPCOM(out srvmgr);
if (res != 0) {
Console.WriteLine("StartXPCOM failed: {0:X2}", res);
return 1;
}
if (args[0] == "add")
return xptinvoke_test_add(args);
if (args[0] == "xptinfo")
return xptinfo_test(args);
if (args[0] == "cb")
return xptinvoke_test_cb();
Console.WriteLine("Unknown test mode: {0}", args[0]);
return 1;
}
}