Я использую Visual Studio 2017. У меня есть мультипроектное решение (c ++). Есть проект, который создает исполняемый файл (основное приложение) и проекты, которые создают динамические c библиотеки (плагины). Базовое приложение загружает плагины во время выполнения, используя функции LoadLibrary
и GetProcAddress
. Базовое приложение определяет объект, который содержит карту, вот упрощенное определение:
class T
{
public:
void fun(const std::string& key)
{
++data_[key];
}
private:
std::map<std::string, int> data_;
};
T объект статически определяется в базовом приложении и регистрируется в плагине (через указатель), который использует его следующим образом:
void Plugin::fun()
{
t->fun(key);
}
Распределение памяти происходит, когда плагин вызывает функцию, но освобождение выполняется в основном приложении. Это приводит к следующей ошибке после закрытия приложения:

Эта ошибка отсутствует, когда я использую объект T только из основного приложения. У меня есть нашел похожий topi c но там сообщение об ошибке немного отличается. Свойство генерации кода для основного приложения и плагина выглядит следующим образом:

Что означает, что для записи Runtime Library
установлено значение different options
жирным шрифтом? Как мне установить Runtime Library
в основном приложении и плагине, чтобы решить проблему?