Код: Выделить всё
2980 BA3 005A3060 ?getFoo@FooLib@@YAAEAVFoo@1@XZ
2638 A4D 005A3020 ?getApplicationData@Foo@FooLib@@QEAAAEAVApplicationData@2@XZ
2639 A4E 005A3030 ?getApplicationData@Foo@FooLib@@QEBAAEBVApplicationData@2@XZ
2738 AB1 000F8A30 ?getDataRootPath@ApplicationData@FooLib@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@XZ
< /code>
С помощью Copilot я смог перевести их на (скрещивая пальцы, что это правильно): < /p>
Foo __cdecl FooLib::getFoo()
ApplicationData& __thiscall FooLib::Foo::getApplicationData()
const ApplicationData& __thiscall FooLib::Foo::getApplicationData() const
std::wstring __thiscall FooLib::ApplicationData::getDataRootPath() const
Код: Выделить всё
from ctypes import *
dll = WinDLL(r"c:\path\to\Foo.dll")
getFoo = getattr(dll, "?getFoo@FooLib@@YAAEAVFoo@1@XZ")
getFoo.argtypes = []
getFoo.restype = c_void_p
getAppData = getattr(dll, "?getApplicationData@Foo@FooLib@@QEAAAEAVApplicationData@2@XZ")
getAppData.argtypes = [c_void_p]
getAppData.restype = c_void_p
getAppData(getFoo()) # returns a pointer reliably, same value each time
Однако окончательная функция не работает, сбоя питона или бросает насилие доступа, вероятно, потому что она возвращает тип строки C+ и Codeps
Подробнее здесь: https://stackoverflow.com/questions/797 ... -from-pyth
Мобильная версия