Вы сказали, что пытаетесь вызвать функцию, которая не была экспортирована; насколько я знаю, это невозможно из Python. Однако ваша проблема заключается в том, что имя искажено.
Вы можете вызвать произвольный экспорт, используя ctypes. Поскольку имя искажено и не является допустимым идентификатором Python, вы можете использовать getattr().
Другой подход, если у вас есть правильная информация, заключается в том, чтобы найти экспорт по порядку, который вам нужно будет делать, если вообще не было экспортировано имя. Один из способов получить порядковый номер будет использовать dumpbin.exe, который включен во многие компилированные языки Windows. Это фактически интерфейс для компоновщика, поэтому, если у вас есть MS LinK.exe, вы также можете использовать его с соответствующими ключами командной строки.
Чтобы получить функцию ссылки (которая является «функция-указатель» объект привязан к адресу его), вы можете использовать что-то вроде:
импорт ctypes FUNC = GetAttr (ctypes.windll.msvcrt, "@@ myfunc") retval = func (None)
Естественно, вы заменили бы «msvcrt» на DLL, которую вы специально хотите вызвать.
Здесь я не показываю, как развязать имя, чтобы получить вызывающую подпись, и, следовательно, необходимые аргументы. Для этого потребуется деманглер, и они очень специфичны для бренда И ВЕРСИЯ компилятора C++, используемого для создания DLL.
Существует определенная проверка ошибок, если функция stdcall, поэтому вы можете иногда играть с вещами, пока не получите их правильное. Но если функция - cdecl, тогда нет возможности автоматически проверить. Аналогично, вы должны помнить, чтобы включить дополнительный параметр, если это необходимо.