У меня есть DLL, которая загружается во время выполнения.Для внутренней работы DLL использует статическую переменную (это std :: map), эта переменная определяется внутри DLL.
Когда я вызываю первую функцию из DLL после загрузки, я получаю SegFaultиз DLL карта никогда не инициализировалась.Из всего, что я прочитал из DLL Загрузка, статическая и глобальная инициализация данных должна произойти еще до вызова DLLMain.
Чтобы проверить статическую инициализацию, я добавил статическую структуру, которая выводит сообщение, и даже добавляет точку остановадля хорошей меры.
static struct a
{
a(void) { puts("Constructing\n"); }
}statica;
Не было ни сообщения, ни прерывания перед DLLMain или вызовом функции.
Вот мой код загрузки:
dll = LoadLibrary("NetSim");
//Error Handling
ChangeReliability = reinterpret_cast<NetSim::ChangeReliability>
(GetProcAddress(dll, "ChangeReliability"));
ChangeReliability(100);
Iпроверил, что версия dll верна, пересобрал весь проект несколько раз, но без разницы.Я свежая из идей.