Jump to content
Korean Random

Создание PYD для embedded python


fecell

Recommended Posts

  • 1 month later...
  • 2 weeks later...

@Mixaill, клёвый костыль для XP добавил)

Стало интересно, а если создать враппер и для Scaleform'а, чтобы подменять нужные .as файлы на свои...

Это должно избавить от возни c battle.swf и с маркерами...

Насколько это сложно?

post-16296-0-10111300-1475949232_thumb.jpg

 

Надо копать в сторону AS3 VM и Scaleform::GFx::AS3::VM::LoadPackage...

Edited by SkepticalFox
Link to comment
Short link
Share on other sites

Первая попытка сделать нормальный libpython удалась наполовину: функции работают, но решительно непонятно что делать со структурами.

https://bitbucket.org/xvm/wot.libpython/

post-15044-0-17445800-1476048245_thumb.png

post-15044-0-08262800-1476048460_thumb.png

post-15044-0-42067800-1476048737_thumb.png

Edited by Mixaill
  • Upvote 2
Link to comment
Short link
Share on other sites

но решительно непонятно что делать со структурами.

а что с ними?

__declspec(dllexport)/extern на них не влияет?

Может есть какой-то дефайн типа Py_ENABLE_SHARED...

Edited by SkepticalFox
Link to comment
Short link
Share on other sites

а что с ними?

__declspec(dllexport)/extern на них не влияет?

Может есть какой-то дефайн типа Py_ENABLE_SHARED...

__declspec(dllexport) работает отлично, символы экспортируются, тут вопросов нет.

 

Проблема в том, что делать перенаправление со структуры, объявленной у себя, на структуру, которая внутри WorldOfTanks.exe нельзя. (или я не знаю как?).

 

Точнее, можно, но для этого нужно будет изменить заголовочные файлы (добавить по звёздочке к каждой структуре), что приведёт к поломке бинарной совместимости с обычными .pyd собранными под обычный белый питон, чего не хотелось бы.

 

В качестве самого упоротого варианта вижу копирование содержимого структур к себе и замену адресов в WorldOfTanks.exe на свои. Но это как-то перебор, тут и до смены наживую версии Python (с 2.7.7 на 2.7.12, например) недалеко.

Edited by Mixaill
Link to comment
Short link
Share on other sites

Есть ещё вариант запатчить _PyImport_GetDynLoadFunc() своей реализацией, которая после LoadLibraryEx() будет подменять адреса структур в импортированном файле на правильные из WorldOfTanks.exe.

Edited by Mixaill
Link to comment
Short link
Share on other sites

 

 

Первая попытка сделать нормальный libpython удалась наполовину

немного перебор вроде, ЕМНИП PyString_AsString можно не врапить, а использовать макрос PyString_AS_STRING (по аналогии как и PY_INCREF и т.п.).

Link to comment
Short link
Share on other sites

немного перебор вроде, ЕМНИП PyString_AsString можно не врапить, а использовать макрос PyString_AS_STRING (по аналогии как и PY_INCREF и т.п.).

 

Не, вполне себе самостоятельная функция, мало ли кто захочет использовать:

https://hg.python.org/cpython/file/v2.7.7/Include/stringobject.h#l69

https://hg.python.org/cpython/file/v2.7.7/Objects/stringobject.c#l791

Edited by Mixaill
Link to comment
Short link
Share on other sites

 

 

Не, вполне себе самостоятельная функция

Ну так-то да, я к тому что:

char* PyString_AS_STRING(PyObject *string)
Macro form of PyString_AsString() but without error checking. Only string objects are supported; no Unicode objects should be passed.

https://docs.python.org/2/c-api/string.html#c.PyString_AS_STRING

 

строка 91, stringobject.h (2.7.12)

#define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval)
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...