Проблема при использовании DLL
От: Dimonira  
Дата: 29.09.09 14:36
Оценка:
Сразу оговорюсь, что в C# пока не профи. Есть простая самописная DLL (не COM), написанная на C++, отлаженная, проверенная, рабочая — работает с приложением, написанным тоже на C++.
Есть задача использовать эту DLL в программе на C#. Казалось бы, не должно быть проблем, но они, как всегда, появляются там где их не ждали. Возникает исключение System.AccessViolationException {"Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."} при попытке вызова функции DLL, в которой создаётся внутренний объект класса (динамически выделяется память). При вызове "простых" функций (которые, например, просто возвращают какие-то значения), всё нормально.
Вопросы: откуда ноги растут и как побороть?
Re: PS. Есть подозрение на авторство выделенной памяти
От: Dimonira  
Дата: 29.09.09 21:31
Оценка:
Пораскинув мозгами, появилась мысль, что функция DLL выделяет память (освобождается она при вызове другой функции или выгрузке DLL), а потом после её вызова CLR эту память пытается сразу освободить.
А как этого избежать? Как указать в C#, что память, выделяемая в DLL, "на её совести" и сама DLL отвечает за её освобождение?
Re[2]: PS. Есть подозрение на авторство выделенной памяти
От: Dimonira  
Дата: 30.09.09 11:26
Оценка:
Вопрос снят. С памятью всё нормально, просто инициализация была неуспешной (забыл, что перед этим надо было сначала другое проинициализировать) и возвращался false, который обработка по умолчанию кода возврата интерпретировала как неудачу и выбрасывала исключение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.