Jump to content
Korean Random
fecell

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

Recommended Posts

здесь давно выкладывают http://dvamaster.ru/?p=308#more-308

но лишь адреса, по крайней мере проще искать сигнатуры зная где что.

последнее что выложено - 385 адресов для 9.14.8318

Share this post


Link to post

Short link
Share on other sites

385 адресов

Там сплошная ненужность(

 

Надо автоматизировать поиск сигнатур...

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Как-то неудобно хранить все в одном json-файле. В разных тоже неудобно...

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

В 9.16 сменили компилятор с MSVC 17 (VS 2012) на MSVC 19 (VS 2015), в результате чего сигны немного кирдыкнулись :(

Share this post


Link to post

Short link
Share on other sites

сигны немного кирдыкнулись :(

будет над чем помидитировать) Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

 

 

в результате чего сигны немного кирдыкнулись

посмотрим... скоро уже по идее новый патч выйдет, через недели 2-3 думаю.

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

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

 

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

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

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

Без Scaleform'а в исходниках, мне кажется, это почти невозможно.

Share this post


Link to post

Short link
Share on other sites

Без Scaleform'а в исходниках, мне кажется, это почти невозможно.

ну исходники уже 5 лет валяются... Edited by SkepticalFox

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites

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

а что с ними?

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

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

Edited by SkepticalFox

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites

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

А, всё, понял) Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

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

Edited by Mixaill

Share this post


Link to post

Short link
Share on other sites

 

 

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

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

Share this post


Link to post

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

Share this post


Link to post

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)

Share this post


Link to post

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...