[C++] Функция вызова в dll c ++ без заголовка


Answers

Если функция является C ++, вы можете получить подпись функции из искаженного имени. Dependency Walker - это один из инструментов, который сделает это за вас. Однако, если DLL была создана с помощью C linkage (Dependency Walker расскажет вам об этом), вам не повезло.

Question

Я хотел бы вызвать метод из dll, но у меня нет источника ни заголовочного файла. Я попытался использовать dumpbin / exports, чтобы увидеть имя метода, но я могу найти подпись методов?

Есть ли способ вызвать этот метод?

Благодаря,




Язык C ++ ничего не знает о DLL.

Это в Windows? Один из способов:

  • откройте dll в depends.exe поставляемом с (Visual Studio)
  • проверить подпись функции, которую вы хотите вызвать
  • используйте LoadLibrary() чтобы загрузить эту DLL (будьте осторожны по пути)
  • используйте GetProcAddress() чтобы получить указатель на функцию, которую вы хотите вызвать
  • используйте этот указатель к функции, чтобы сделать вызов с действительными аргументами
  • используйте FreeLibrary() чтобы освободить дескриптор

BTW: этот метод также обычно называют динамической компоновкой времени выполнения, в отличие от динамической компоновки времени компиляции, когда вы скомпилируете свои источники с соответствующим файлом lib .

Существует некоторый аналогичный механизм для * nixes с dlopen , но после этого моя память начинает терпеть неудачу. Что-то, называемое objdump или nm должно начать с проверки функций.




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

Тем не менее, утилита undname также может быть полезна.