Делегированные объекты - это объекты, собираемые мусором, как и любой другой тип, не имеющий значения в .NET.Что означает, что сборщик мусора может перемещать их.Это означает, что получение их адреса не может работать, когда GC сжимает кучу, адрес изменится.
Полагаю, вам нужно сделать это, чтобы передать неуправляемый код как-то для делегата.Ручка является типичным решением.Просто держите счетчик, который вы увеличиваете каждый раз, когда создаете новый объект.Сохраните его в Dictionary<int, PaintDelegate^>^
и передайте значение счетчика неуправляемому коду.
Marshal :: GetFunctionPointerForDelegate () - это еще один подход, теперь неуправляемый код может напрямую вызывать цель делегата.Не долго, но пустота *.Однако вы все равно должны хранить объект делегата в безопасном месте, чтобы он не собирал мусор.Я рекомендую первое.