Как я могу отправить управляемый объект собственной функции, чтобы использовать его?
-
28-10-2019 - |
Вопрос
Как я могу отправить управляемый объект собственной функции, чтобы использовать его?
родовое словоРешение 2
Поиграв в Google, прочитав MSDN и попробовав несколько кодов, я нашел этот метод для передачи управляемого объекта неуправляемой функции.
Эти методы показывают, как преобразовать Object ^ в void * и преобразовать void * в Object ^.
родовое словоПримечание: если unmanaged_function имеет переменные аргументы, этот метод работать не будет.
Другие советы
Более чистый и лучший подход - использовать gcroot .
Цитата из MSDN Как: объявить дескрипторыв собственных типах :
<цитата>Шаблон gcroot реализован с использованием возможностей класса значений System :: Runtime :: InteropServices :: GCHandle, который предоставляет «дескрипторы» к куче со сборкой мусора.Обратите внимание, что сами дескрипторы не собираются сборщиком мусора и освобождаются, когда они больше не используются деструктором в классе gcroot (этот деструктор нельзя вызвать вручную).Если вы создаете экземпляр объекта gcroot в собственной куче, вы должны вызвать delete для этого ресурса.
Ваш пример кода адаптирован для использования gcroot
(код компилируется и запускается с использованием VS 2010):