81 lines
3.3 KiB
C#
81 lines
3.3 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using com.itac.mes.imsapi.client.dotnet;
|
|
|
|
internal static class Program
|
|
{
|
|
private static int Fail(string text)
|
|
{
|
|
Console.Error.WriteLine("ABI FAIL: " + text);
|
|
return 2;
|
|
}
|
|
|
|
private static int Main()
|
|
{
|
|
try
|
|
{
|
|
// This call is intentionally compiled against 10.0.0-3. The resulting EXE
|
|
// must run unchanged after IMSApiDotNet.dll is replaced by either new target.
|
|
IMSApiDotNet.setProperty("itac.appid", "LegacyBinarySmoke");
|
|
|
|
IMSApiDotNet a = IMSApiDotNet.loadLibrary();
|
|
IMSApiDotNet b = IMSApiDotNet.loadLibrary();
|
|
if (a == null || b == null) return Fail("loadLibrary returned null");
|
|
if (!object.ReferenceEquals(a, b)) return Fail("legacy singleton behavior changed");
|
|
|
|
string version = null;
|
|
int rc = a.imsapiGetLibraryVersion(ref version);
|
|
if (rc != IMSApiDotNetConstants.RES_OK) return Fail("imsapiGetLibraryVersion return code " + rc);
|
|
if (string.IsNullOrEmpty(version)) return Fail("empty library version");
|
|
|
|
// Reflection checks the declaring type and static/instance metadata that caused
|
|
// MissingMethodException in existing applications.
|
|
MethodInfo setProperty = typeof(IMSApiDotNetBase).GetMethod(
|
|
"setProperty",
|
|
BindingFlags.Public | BindingFlags.Static,
|
|
null,
|
|
new[] { typeof(string), typeof(string) },
|
|
null);
|
|
if (setProperty == null) return Fail("IMSApiDotNetBase.setProperty(string,string) static missing");
|
|
if (setProperty.ReturnType != typeof(void)) return Fail("setProperty return type changed");
|
|
if (setProperty.DeclaringType != typeof(IMSApiDotNetBase)) return Fail("setProperty declaring type changed");
|
|
|
|
MethodInfo loadLibrary = typeof(IMSApiDotNet).GetMethod(
|
|
"loadLibrary",
|
|
BindingFlags.Public | BindingFlags.Static,
|
|
null,
|
|
Type.EmptyTypes,
|
|
null);
|
|
if (loadLibrary == null || loadLibrary.ReturnType != typeof(IMSApiDotNet))
|
|
return Fail("IMSApiDotNet.loadLibrary() signature changed");
|
|
|
|
if (!typeof(IMSApiDotNetConstants).IsAssignableFrom(typeof(IMSApiDotNetBase)))
|
|
return Fail("IMSApiDotNetBase no longer derives from IMSApiDotNetConstants");
|
|
|
|
MethodInfo getError = typeof(IMSApiDotNetConstants).GetMethod(
|
|
"getIMSApiDotNetErrorText",
|
|
new[] { typeof(int) });
|
|
if (getError == null || getError.ReturnType != typeof(string))
|
|
return Fail("IMSApiDotNetConstants.getIMSApiDotNetErrorText(int) missing");
|
|
|
|
Console.WriteLine("ABI OK");
|
|
Console.WriteLine("Loaded: " + typeof(IMSApiDotNet).Assembly.FullName);
|
|
Console.WriteLine("Path: " + typeof(IMSApiDotNet).Assembly.Location);
|
|
Console.WriteLine("API: " + version);
|
|
return 0;
|
|
}
|
|
catch (MissingMethodException ex)
|
|
{
|
|
return Fail(ex.ToString());
|
|
}
|
|
catch (TypeLoadException ex)
|
|
{
|
|
return Fail(ex.ToString());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Fail(ex.ToString());
|
|
}
|
|
}
|
|
}
|