Я пишу небольшую программу на 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 также не будут работать, так что, похоже, это как-то связано с векторным или строковым классом.
Кто-нибудь знает, как решить эту проблему, или я использую два исполняемых файла с разными конфигурациями?