Я скачал как 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, вам потребуется выполнить несколько шагов. Давайте пройдемся по каждому из них.
-
Подготовка: Убедитесь, что у вас установлены инструменты, такие как ‘DLL Export Viewer’ и ‘Dependency Walker’. Эти программы помогут вам извлечь экспортированные функции из DLL-файла.
-
Поиск экспортируемых функций:
- Запустите ‘DLL Export Viewer’.
- Откройте вашу ‘luxcore.dll’ и посмотрите на список экспортируемых функций. Эти функции могут быть обозначены в виде Си (не C++), т.е. без манглинга.
- Также, проверьте, есть ли функции с похожими именами. Если нет, возможно, функции помечены по-другому или они являются частями классов, и экспортируются в виде методов на уровне библиотеки.
-
Использование
dumpbin
:- Если у вас установлен Visual Studio, вы можете воспользоваться утилитой
dumpbin
для получения дополнительной информации о DLL. Используйте команду:dumpbin /EXPORTS path\to\luxcore.dll
- Это выведет список всех экспортируемых функций. Обратите внимание на то, как они называются.
- Если у вас установлен Visual Studio, вы можете воспользоваться утилитой
-
Манглирование имен функций:
- В C++, имена функций (методов классов) изменяются для учета пространств имен и других факторов компиляции. Например, метод
luxcore::RenderSession::Start()
может быть заманглинирован в что-то вроде?Start@RenderSession@luxcore@@QEAAXXZ
. - Для получения точного манглированного имени используйте
link.exe
(или другую подходящую утилиту), чтобы создать список манглированных имен. Вы также можете использовать онлайн-сервис или библиотеку, такую какc++filt
, для декодирования мангла.
- В C++, имена функций (методов классов) изменяются для учета пространств имен и других факторов компиляции. Например, метод
-
Сравнение с исходным кодом:
- Обратитесь к исходному коду, чтобы проверить, есть ли какие-либо макросы или директивы, которые могут влиять на именование методов. Они могут использоваться для экспортирования только определенных интерфейсов.
-
Используйте
MSVC
или другие инструменты для созданияDLL
:- Если вы имеет возможность компилировать проект, вы можете использовать
__declspec(dllexport)
и другие атрибуты для того, чтобы сделать функции доступными из вашего DLL. Таким образом вы сможете управлять экспортом функций.
- Если вы имеет возможность компилировать проект, вы можете использовать
- Тестирование:
- После того как вы нашли необходимое манглированное имя, протестируйте его в вашем проекте. Вы можете использовать платформы для динамической компоновки и размещения объекта для проверки правильности манглирования.
Если вы выполнили все эти шаги и все еще не можете найти нужные функции, возможно, они были либо удалены, либо переименованы в обновлениях библиотеки. В таком случае, рекомендуется проверить документацию проекта или обратиться на форумы разработчиков для получения дополнительной информации.
Также на последок, если у вас есть доступ к исходному коду LuxCoreRender, может быть полезным просто скомпилировать его, чтобы подтвердить правильность имен и их маппирования.
Надеюсь, эти шаги помогут вам успешно найти катализированные имена функций C++. Удачи!