using System;
using System.Runtime.InteropServices;
namespace CSharpSampleCustomAdapter
{
public class AdapterFuncs : IDisposable
{
private const String dllName = "CustomAdapter";
[DllImport(dllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "CreateCustomAdapter")]
private static extern IntPtr CreateCustomAdapter();
[DllImport(dllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "DestroyCustomAdapter")]
private static extern void DestroyCustomAdapter(IntPtr adapterFuncs);
public IntPtr Handle { get; } = CreateCustomAdapter();
#region IDisposable Support
private bool _isDisposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
DestroyCustomAdapter(Handle);
_isDisposed = true;
}
}
~AdapterFuncs()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
}
class Program
{
static void Main(string[] args)
{
var adapter = new AdapterFuncs();
Tobii.InteractionLib.IInteractionLib intlib =
Tobii.InteractionLib.InteractionLibFactory.CreateInteractionLib(
Tobii.InteractionLib.FieldOfUse.Interactive, adapter.Handle);
Console.WriteLine("Starting interaction library update loop.");
const int max_cycles = 10;
var cycle = 0;
while (cycle++ < max_cycles)
{
intlib.WaitAndUpdate();
}
intlib.Dispose();
adapter.Dispose();
}
}
}