Точка входа процедуры не может быть расположена в ядре библиотеки динамической связи.файл DLL

Я конвертирую свой проект в использование DLL и пытаюсь разбить мой Singleton класс, чтобы избежать использования шаблонов.

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

Я написал простой метод уничтожения, такой как:

LudoMemory *memory_Singleton = NULL;

    void LudoMemory::Destroy()
    {
        LUDO_SAFE_DELETE(m_Singleton)
    }

и при запуске программы (без ошибок компилятора) я получаю это ошибка:

точка входа процедуру ?Уничтожить@LudoMemory@ @ SAXXZ не удалось находиться в динамической библиотеке ссылок Людокор.dll файлы

LudoCore проект LudoMemory принадлежит. Почему это происходит? Как я могу ее решить?

3 ответов


У вас нет нескольких версий ludocore.DLL в вашей системе, не так ли? Ошибки точек входа процедуры обычно означают: вы скомпилировали свой проект против ludocore.lib версии x, и при запуске программы он использует ludocore.dll версия y, а версия y не определяет LudoMemory:: Destroy().


ответ Джейкоба о нескольких версиях DLL кажется вероятным.

кроме того, в некоторых системах сборки необходимо явно указать, какие функции будут экспортироваться в DLL.

исследуйте среду сборки и посмотрите, нужно ли предоставить список методов для экспорта в качестве точки входа.


в среде сборки Visual Studio также можно попробовать отключить ссылки в настройках оптимизации компоновщика [ нет (/OPT:NOREF)]