dll в режиме отладки, вызов программы в режиме выпуска (и наоборот)

Я пишу небольшую программу на C++, которая тестирует dll на C, содержащую некоторые функции. Эти dll существуют в отладочной версии и версии выпуска, и я хотел бы загрузить их обе с помощью одной и той же программы и сравнить их с предыдущей версией.

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

Я загружаю dll/функции, используя функции LoadLibrary и GetProcAddress.

Существует два типа функций: void type1(int&)и void type2(vector*). Тип 1 отлично работает независимо от конфигурации. Но тип 2 работает только при совпадении конфигурации.

Код:

typedef void(*GetNames)(vector *);
GetNames get_var_names = (*GetNames)GetProcAddress(dll,"get_var_names");
вектор <строка>var_names;
get_var_names(&var_names);

В последней строке программа завершается с ошибкой типа «0xC0000005: Нарушение прав доступа к местоположению чтения 0xbaadf008». если конфигурация вызывающей программы и dll не совпадают. Ошибка является нарушением чтения, когда программа выпущена, а dll находится в отладочном состоянии, но нарушением записи, когда программа находится в режиме отладки, а dll - выпущена.

Предполагается, что функция просто вызывает push_back("x") несколько раз с разными строками.

Не кажется совершенно невозможным использовать отладочную dll в программе конфигурации выпуска, иначе все функции типа 1 также не будут работать, так что, похоже, это как-то связано с векторным или строковым классом.

Кто-нибудь знает, как решить эту проблему, или я использую два исполняемых файла с разными конфигурациями?

5
задан DanielAbele 6 June 2012 в 14:57
поделиться