Я борюсь с одним. Я пытаюсь вызвать функции игры из python api через внедренную dll. Иногда это срабатывает, но чаще всего вызывает ошибку:
Исключение, выброшенное на 0x1E07F731 (python27.dll) в Soria2.pl.exe: 0xC0000005: место записи нарушения прав доступа 0x0000000 C
это журнал от отладчика.
Мой код:
std::vector<int> mobList()
{
PyObject* mod = PyObject_GetAttrString(PyImport_AddModule("player"), "GetCharacterDistance");
PyObject* mod2 = PyObject_GetAttrString(PyImport_AddModule("chr"), "GetInstanceType");
PyObject* args = PyTuple_New(1);
std::vector<int> mobs;
for (int i = 1; i < 100000; i++) {
try {
PyTuple_SetItem(args, 0, PyInt_FromLong(i));
PyObject* mob = PyObject_CallObject(mod, args);
if (PyInt_AsLong(mob) > 0 && PyInt_AsLong(mob) < 400) {
PyObject* enemy = PyObject_CallObject(mod2, args);
if (PyInt_AsLong(enemy) == 0) {
mobs.push_back(i);
}
if (enemy != NULL) {
Py_DECREF(enemy);
}
}
if (mob != NULL) {
Py_DECREF(mob);
}
Py_XDECREF(args);
}
catch (int e) {
std::cout << e << std::endl;
}
}
return mobs;
}
и проблемные c часть:
PyObject* mob = PyObject_CallObject(mod, args);
Иногда работает, но в основном бросает упомянутая ошибка после случайного количества итераций (50k, 60k, 70k et c). Я все перепробовал и до сих пор не могу понять: / Благодарю за любую помощь.