Информация об изменениях

Сообщение Безопасен ли такой маршалинг? от 10.11.2014 8:55

Изменено 10.11.2014 9:27 SanyaVB

Вот простой пример:
    [ComVisible(true)]
    public interface IInterface
    {
        [return: MarshalAs(UnmanagedType.Interface)]
        IInterface1 GetObject();
    }


Объект IValue создается только в управляемой среде и используется как управляемым так и в неуправляемым кодом.
Вообщем для неуправляемого кода в таком случае это опасный маршалинг? Имеется ввиду влияние мусоросборщика!!!
Если все таки мусоросборщик может поменять адресное пространство объекта, то ниже написанная конструкция решит проблему?
  IInterface1 obj = new ...
  GCHandle objHandle = GCHandle.Alloc(obj, GCHandleType.Normal);
Безопасен ли такой маршалинг?
Вот простой пример:
    [ComVisible(true)]
    public interface IInterface
    {
        [return: MarshalAs(UnmanagedType.Interface)]
        IInterface1 GetObject();
    }


Объект IInterface1 создается только в управляемой среде и используется как управляемым так и в неуправляемым кодом.
Вообщем для неуправляемого кода в таком случае это опасный маршалинг? Имеется ввиду влияние мусоросборщика!!!
Если все таки мусоросборщик может поменять адресное пространство объекта, то ниже написанная конструкция решит проблему?
  IInterface1 obj = new ...
  GCHandle objHandle = GCHandle.Alloc(obj, GCHandleType.Normal);