MarshalDirectiveException в Unity при маршалинге int[] в SafeArrayC#

Место общения программистов C#
Ответить
Anonymous
 MarshalDirectiveException в Unity при маршалинге int[] в SafeArray

Сообщение Anonymous »


Маршалинг int[] в SafeArray, похоже, ведет себя по-разному в Unity и в автономном приложении .NET.

У меня есть COM-dll, определяющая интерфейс

[ComImport] Публичный интерфейс Калибровка { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [возврат: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_INT)] Массив getInputKey(); } В моем сценарии C#, либо в Unity, либо в автономном приложении .NET, я создал класс, который наследуется от Calibration

публичный класс MyCalibration: Калибровка { частный статический только для чтения int[] _inputs = new[] {0}; общественная недействительность doSomethingElse() { // Что-нибудь } общедоступный массив getInputKey() { вернуть _входные данные; } } У другого COM-объекта есть метод

[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] void setCalibrationInterface([MarshalAs(UnmanagedType.Interface), In] Calibration ical); Я создал экземпляр MyCalibration и использовал его в качестве аргумента метода setCalibrationInterface.

var myCal = new MyCalibration(); util.setCalibrationInterface(myCal); doSomethingElse() вызывается без проблем. Однако в Unity я получил следующее исключение, когда getInputKey() вызывается в консоли Unity:

MarshalDirectiveException: макет типа System.Array должен быть последовательным или явным. (собственная оболочка для управляемого) SREYELINKLib.ICalibration.getInputKey(intptr,System.Array&) UnityEngine.c:b__0_0(Object, UnhandledExceptionEventArgs) Есть идеи, как это исправить?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»