У меня есть неуправляемая DLL, которая предоставляет функцию, которая принимает указатель на структуру данных. У меня есть код C #, который создает структуру данных и вызывает функцию DLL без каких-либо проблем. В точке вызова функции к dll указатель верный.
Моя проблема заключается в том, что DLL сохраняет указатель на структуру и использует указатель на структуру данных в более поздний момент времени. Когда библиотека DLL использует указатель, она становится недействительной (я предполагаю, что среда выполнения .net переместила память куда-то еще).
Каковы возможные решения этой проблемы?
Возможные решения, которые я могу придумать:
- Исправить расположение памяти в структуре данных как-нибудь? Я не знаю, как бы вы сделали это в C # или даже если бы вы могли.
- Выделите память вручную, чтобы я мог контролировать ее, например, используя Marshal.AllocHGlobal
- Измените контракт функции DLL, чтобы скопировать структурные данные (это то, что я сейчас делаю, как краткосрочное изменение, но я вообще не хочу менять dll, если могу помочь, поскольку это не мой код для начала).
Есть ли другие лучшие решения?