Здравствуйте. Использую конвертер Z-397 и контроллер для подключения СКУД к ПК. Для этого использую SDK Guard, а именно библиотеку ZGuard.dll и код из примеров, а именно из примера CtrEvents. Все это нужно, чтобы редактор Unity3d обрабатывал события, поступающие с контроллера и выводил их в некоторый лог сообщений (аналогично тому, как в примере происходит работа в консоли). Код соответственно интегрируется в скрипты Unity.
Библиотека и код были успешно перенесены. Но возникает проблема, при которой после завершения работы в Unity (то есть выключения сцены), она просто вылетает. Ну и соответственно никаких событий от контроллера получить тоже не удается. В последующем исследовании выяснилось, что выбрасывается Exception: Type Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid which is passed to unmanaged code must have a StructLayout attribute. Исключение выбрасывается в методе ToggleEventNotifyer() (аналогичный с методом в примере), а именно в этой строке:
if (m_oEvent == null)
m_oEvent = new ManualResetEvent(false);
ZG_CTR_NOTIFY_SETTINGS rNS = new ZG_CTR_NOTIFY_SETTINGS(
ZGIntf.ZG_NF_CTR_NEW_EVENT, m_oEvent.SafeWaitHandle, IntPtr.Zero, 0,
m_nAppReadEventIdx, 300, 0); );
При этом программа корректно отрабатывает из примера в консоли, но при интеграции в Unity происходит вот такая проблема. При этом до этого успешно получилось перенести инициализацию библиотеки SDK, конвертера и контроллера. Unity их обнаруживал и уведомлял об этом.