public static int Main() {
MainApp a = new MainApp();
// simple delegate roundtrip
{
int x = CallSimpleDelegate(a.CreateSimpleCallback(false), 1);
if (x != 2) {
Console.WriteLine("Unexpected value: " + x.ToString());
return 1;
}
}
Console.WriteLine("Simple delegate roundtrip passed");
// delegate roundtrip
{
double x = CallDelegate(a.CreateCallback(false), new MyValue(1));
if (x != 2) {
Console.WriteLine("Unexpected value: " + x.ToString());
return 1;
}
}
Console.WriteLine("Delegate roundtrip passed");
// simple delegate roundtrip - crossdomain
{
AppDomain app = AppDomain.CreateDomain("MyDomain");
MainApp remoteapp = (MainApp)app.CreateInstanceAndUnwrap ("interoptest", "MainApp");
MySimpleDelegate callback = remoteapp.CreateSimpleCallback(true);
int x = CallSimpleDelegate(callback, 1);
if (x != 2) {
Console.WriteLine("Unexpected value: " + x.ToString());
return 1;
}
}
Console.WriteLine("Simple delegate roundtrip crossdomain passed");
// delegate roundtrip - crossdomain
{
AppDomain app = AppDomain.CreateDomain("MyDomain");
MainApp remoteapp = (MainApp)app.CreateInstanceAndUnwrap ("interoptest", "MainApp");
MyDelegate callback = remoteapp.CreateCallback(true);
double x = CallDelegate(callback, new MyValue(1));
if (x != 2) {
Console.WriteLine("Unexpected value: " + x.ToString());
return 1;
}
}
Console.WriteLine("Delegate roundtrip crossdomain passed");
// ffi roundtrip
{
double d = CallFFI(a, new MyValue(1));
if (d != 2) {
Console.WriteLine("Unexpected value: " + d.ToString());
return 2;
}
}
Console.WriteLine("FFI roundtrip passed");
// array marshaling
{
int[] rg = new int[4];
rg[0] = 12;
rg[1] = 33;
rg[2] = -21;
rg[3] = 18;
int sum = Sum(rg.Length, rg);
if (sum != 42) {
Console.WriteLine("Unexpected value: " + sum.ToString());
return 3;
}
}
Console.WriteLine("Array marshalling passed");
// array marshaling ex
{
MyStruct[] rg = new MyStruct[7];
rg[0].value = new MyValue(2314);
rg[1].value = new MyValue(3452);
rg[2].value = new MyValue(3235);
rg[3].value = new MyValue(3452);
rg[4].value = new MyValue(6980);
rg[5].value = new MyValue(3133);
rg[6].value = new MyValue(3426);
int sum = ObjectSum(rg.Length, rg);
if (sum != 25992) {
Console.WriteLine("Unexpected value: " + sum.ToString());
return 4;
}
}
Console.WriteLine("Array marshalling ex passed");
// errorinfo roundtrip
{
bool thrown = false;
try {
ReallyBadError(new MyValue(0));
}
catch (Exception e)
{
string s = e.ToString();
if (s.IndexOf("qwerty") == -1) {
Console.WriteLine("Unexpected value: " + s);
return 5;
}
thrown = true;
}
if (!thrown) {
Console.WriteLine("Exception wasn't thrown");
return 5;
}
}
Console.WriteLine("IErrorInfo roundtrip passed");
// exception roundtrip
{
bool thrown = false;
try {
Exception12345678(new MyDelegate(JustThrow), new Exception("EEEE"));
}
catch (SEHException)
{
thrown = true;
}
if (!thrown) {
Console.WriteLine("Exception wasn't thrown");
return 6;
}
}
Console.WriteLine("Exception roundtrip passed");
// exception roundtrip with rethrow
{
bool thrown = false;
try {
try {
Exception12345678(new MyDelegate(JustThrow), new Exception("EEEE"));
}
catch (Exception)
{
throw;
}
if (!thrown) {
Console.WriteLine("Exception wasn't thrown");
return 7;
}
}
catch (SEHException)
{
thrown = true;
}
}
Console.WriteLine("Exception roundtrip with rethrow passed");
// delegate roundtrip
{
MySimpleDelegate d1 = a.CreateSimpleCallback(false);
MySimpleDelegate d2 = DelegateMarshal(d1);
if (d1 != d2) {
Console.WriteLine("Delegate marshal failed");
return 8;
}
}
Console.WriteLine("Delegate marshal passed");
Console.WriteLine("All test passed");
return 0;
}
}