Access Violation
в этом случае может означать очень много вещей, и ссылка msvcr90.dll
может быть очень вводящей в заблуждение.Если вы передадите недопустимые данные в любую из функций стандартной библиотеки MSVC, нарушение доступа произойдет в пределах msvcr90.dll
, а не в вашем коде (при просмотре трассировки стека или просмотре информации об исключении.
При этомтеоретически не должно быть проблем с использованием VC9 DLL в VC ++ 6, поскольку ABI не изменился и формат PE такой же. У вас могут быть проблемы, если msvcrt9.dll
не поддерживается на вашей платформе (например, если вызапускаете MSVC6 в Windows NT), но в противном случае это означает, что вам нужно просмотреть свой код.
Я имею в виду следующее: подключите отладчик и посмотрите, что происходит под сценой!
Oneпримечание: при динамическом использовании разных версий библиотек MSVC НЕ ДОЛЖНО размещаться данные в одной библиотеке и освобождать их в другой, поскольку не гарантируется, что они используют одну и ту же кучу, и вы можете получить повреждение памяти (и ошибки Access Violation
)довольно легко, как это. Это также означает, что если вы пишете C ++, вы не должны создавать объект, а затем передать еговозвращая значение вызывающему приложению, поскольку это произойдет за кулисами.