Как использовать встроенные библиотеки VS2010 в VS2008 - PullRequest
1 голос
/ 30 июня 2011

В моей работе у нас есть VS2008 .Некоторые партнеры в проекте, над которым я работаю, используют VS2010 (не может использовать VS2008)

Они должны строить на основе DLL, и я должен использовать эту DLL в своей структуре ...

Мне удалось построить основное приложение и связать библиотеки DLL.приложение запускается, и объекты из dll VS2010 создаются, но приложение вылетает, когда я пытаюсь удалить эти объекты ...

Windows вызывает точку останова в app.exe.Это может быть связано с повреждением кучи, которая указывает на ошибку в app.exe или любой из загруженных им библиотек DLL.

У вас есть какие-либо идеи о том, как это исправить?

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Библиотеки DLL ваших коллег связаны с библиотекой времени исполнения VS2010. Ваш код связан с библиотекой времени выполнения VS2008.

Когда вы вызываете какую-то функцию из библиотеки VS2010 для выделения нового объекта, она будет размещена в куче этой библиотеки. Когда вы вызываете «delete» для этого объекта, библиотека времени выполнения VS2008 попытается освободить его из собственной кучи. Так как они разные, вы получите эту ошибку.

Если вы собираетесь смешивать среды выполнения подобным образом, вам понадобится dll VS2010 для предоставления функций free() -тиля ( не только деструкторы C ++) для каждого типа. Есть и другие вещи, с которыми вы должны быть очень осторожны при смешивании таких библиотек времени выполнения, как, например, использование контейнеров STL или любого рода объектов «копирование при записи». В общем, этого легче избежать.

0 голосов
/ 20 марта 2012

Объект, который был размещен в dll или в exe, должен быть освобожден в том же месте.Вы должны поговорить об этом со своими партнерами.Для цели может быть использована перегрузка операторов выделения и освобождения http://www.cprogramming.com/tutorial/operator_new.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...