Не удаётся найти мандированные имена функций C++ для DLL

Вопросы и ответы

Я скачал как DLL Export Viewer, так и Dependency Walker.

Я пытаюсь найти замяное имя для этого C++ API, но пока безуспешно.

C++ заголовок доступен по ссылке https://github.com/LuxCoreRender/LuxCore/blob/master/include/luxcore/luxcore.h

DLL доступна по адресу
https://luxcorerender.org/download/
(Выберите Standalone версию 2.6. Windows 64-bit)
Правка: выберите luxcore.dll

Может кто-то посоветовать, как сопоставить замятые имена функций с

luxcore::RenderSession::Start()
luxcore::RenderSession::Stop()
luxcore::RenderSession::SaveFilm()
luxcore::RenderSession::HasDone()

Незамятые имена функций для обоих не содержат упоминаний о Start и Stop, SaveFilm() или HasDone.

Спасибо за любые советы.

Ответ

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

  1. Подготовка: Убедитесь, что у вас установлены инструменты, такие как ‘DLL Export Viewer’ и ‘Dependency Walker’. Эти программы помогут вам извлечь экспортированные функции из DLL-файла.

  2. Поиск экспортируемых функций:

    • Запустите ‘DLL Export Viewer’.
    • Откройте вашу ‘luxcore.dll’ и посмотрите на список экспортируемых функций. Эти функции могут быть обозначены в виде Си (не C++), т.е. без манглинга.
    • Также, проверьте, есть ли функции с похожими именами. Если нет, возможно, функции помечены по-другому или они являются частями классов, и экспортируются в виде методов на уровне библиотеки.
  3. Использование dumpbin:

    • Если у вас установлен Visual Studio, вы можете воспользоваться утилитой dumpbin для получения дополнительной информации о DLL. Используйте команду:
      dumpbin /EXPORTS path\to\luxcore.dll
    • Это выведет список всех экспортируемых функций. Обратите внимание на то, как они называются.
  4. Манглирование имен функций:

    • В C++, имена функций (методов классов) изменяются для учета пространств имен и других факторов компиляции. Например, метод luxcore::RenderSession::Start() может быть заманглинирован в что-то вроде ?Start@RenderSession@luxcore@@QEAAXXZ.
    • Для получения точного манглированного имени используйте link.exe (или другую подходящую утилиту), чтобы создать список манглированных имен. Вы также можете использовать онлайн-сервис или библиотеку, такую как c++filt, для декодирования мангла.
  5. Сравнение с исходным кодом:

    • Обратитесь к исходному коду, чтобы проверить, есть ли какие-либо макросы или директивы, которые могут влиять на именование методов. Они могут использоваться для экспортирования только определенных интерфейсов.
  6. Используйте MSVC или другие инструменты для создания DLL:

    • Если вы имеет возможность компилировать проект, вы можете использовать __declspec(dllexport) и другие атрибуты для того, чтобы сделать функции доступными из вашего DLL. Таким образом вы сможете управлять экспортом функций.
  7. Тестирование:
    • После того как вы нашли необходимое манглированное имя, протестируйте его в вашем проекте. Вы можете использовать платформы для динамической компоновки и размещения объекта для проверки правильности манглирования.

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

Также на последок, если у вас есть доступ к исходному коду LuxCoreRender, может быть полезным просто скомпилировать его, чтобы подтвердить правильность имен и их маппирования.

Надеюсь, эти шаги помогут вам успешно найти катализированные имена функций C++. Удачи!

Оцените материал
Добавить комментарий

Капча загружается...