Я использую какой-то старый API и должен передать указатель на неуправляемый код, который работает асинхронно.
Другими словами, после передачи указателя структуры неуправляемому коду неуправляемый код копирует указатель и немедленно возвращается. Неуправляемый код может получить доступ к этой структуре в фоновом режиме, в другом потоке. У меня нет контроля над неуправляемым кодом, который работает в другом потоке или нить.
Фиксированный оператор {} не может использоваться для закрепления, поскольку он не предназначен для асинхронного неуправляемого пиннинга.
GCHandle может ссылаться только на ссылки, поэтому структура должна быть в коробке для использования GCHandle. Я попробовал, и он работает. Основная проблема заключается в том, что вы не можете обновить struct из управляемого кода. Чтобы обновить структуру, прежде всего нам нужно удалить ее, а затем обновить, а затем снова вставить, но... oops... box again?!? это означает, что предыдущий указатель в памяти по-прежнему указывает на старую несовременную структуру, а новая структура имеет другой указатель, а это значит, что мне нужно передать новый указатель на неуправляемый код... неприменимый в моем случай.
Как я могу привязать структуру в памяти без фиксированного оператора {}, и поэтому я могу обновить ее из управляемого кода без изменения ее указателя?
Спасибо.
Edit:
Просто подумал... есть способ привязать родительский объект, который содержит структуру, а затем получить указатель struct, а не объект контейнера?