Маршалинг структуры поля не удалось в Linux - PullRequest
0 голосов
/ 06 февраля 2019

Я использую следующую структуру для маршалинга данных с помощью PInvoke

[StructLayout(LayoutKind.Sequential)]
struct Data
{
  int id;
  IntPtr state;
  object obj;
}

И все отлично работает в Windows, но в Linux я получаю сообщение об ошибке:

Не могуполе маршала 'obj' типа 'Data': недопустимая комбинация управляемого / неуправляемого типа (маршалинг в и из указателей интерфейса COM не поддерживается).

Почему?Можно ли отключить маршалинг для определенного поля?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Копая источники CLR Я обнаружил, что проблема действительно специфична для Linux и связана с функцией взаимодействия COM, которая доступна только для окон.

Итак, я исправил проблему, используя IntPtr для obj (как предложил @Simonare) и GCHandle.

0 голосов
/ 06 февраля 2019

object obj; свойство недопустимо

Вы можете попробовать с IntPtr obj;

Каков фактический тип obj?

...