Re[2]: Траблы с CArray
От: beldmit  
Дата: 19.12.02 10:32
Оценка:
Здравствуйте, kmn, Вы писали:

kmn>Здравствуйте, beldmit, Вы писали:


B>>Есть класс CVisit

B>>
B>>Есть тип CVisitArray — CArray<CVisit, CVisit&>
B>>
B>>Есть класс CPatient, один из элементов которого — CVisitArray.
B>>
B>>Есть тип CPatientArray — CArray<CPatient, CPatient&>
B>>
B>>Один из элементов документа имеет тип CPatientArray. Несколько
B>>переменных-членов CVisit и CPatient имеют тип CString и COLEDateTime,
B>>остальные — фиксированного размера, указателей нет, поэтому деструкторы
B>>пустые.
B>>
B>>Указатель на документ передается в плагин(dll), который позволяет
B>>добавлять/редактировать как пациентов, так и визиты. При добавлении визита
B>>все нормально работает, пока не завершается работа приложения. После этого
B>>случается Access Violation. Где копать, чтобы его победить?

kmn>

kmn>Проблема с наличием двух (или более) диспетчеров памяти.

kmn>в контексте одного диспетчера памяти (dll) объект создается,

kmn>а в контексте другог (exe) — грохается.

Не очень понимаю. Чем это отличается от обычной передачи указателя в функцию dll для модификации? Я скорее поверю в какую-то ошибку в конструкторе CVisit, из-за чего в память пишется фигня. На этом форуме я нашел похожую проблему — тогда симптомы ошибки исчезали после убирания virtual из описания деструктора, а сама ошибка была следствием выхода где-то за пределы массива. Код живет дома, вечером проверю.

Если Вы правы, то что с этим предполагается делать? В принципе этот плагин я могу счесть частью основной функциональности и не совать в dll, но нет ли более правильного способа?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.