Coder Social home page Coder Social logo

weijingpan / c-pythonbinding Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mirlegend/c-pythonbinding

0.0 1.0 0.0 26.5 MB

从kbengine中提取出来pyscript库,非常方面实现C++与python的交互

Python 52.00% Shell 0.66% Batchfile 0.08% CSS 0.01% Roff 0.31% Visual Basic 0.01% PLSQL 0.05% HTML 0.34% PowerShell 0.01% C++ 29.21% Makefile 1.66% C 7.89% Perl 3.70% DIGITAL Command Language 0.39% Objective-C 2.35% Assembly 1.04% XS 0.01% M4 0.29% eC 0.01% Emacs Lisp 0.01%

c-pythonbinding's Introduction

C-PythonBinding

从kbengine中提取出来python绑定到C++模块,实现python、C++相互调用 已经导出C++类和对象到python模块中

kbengine中的 pyscript库
  KBEngine 引擎使用了流 行的python脚本用作上层逻辑处理,
  kbe作者对python了如指掌,实现了功能强大的pyscript层,开发者只需继承ScriptObject类,
  并且灵活使用一些宏扩展,便可以写出各种功能用途的类和对象导出到python模块里面使用(python类也可继承C++类)。
  KBEngine中 entity、Proxy、Vector234、MemoryStream 都是继承该类。
  python模块可以继承entity类。
  ScriptObject中核心是BASE_SCRIPT_HREADER(CLASS, SUPERCLASS)这个宏,
  该宏主要定义PyTypeObject所需的PyMethodDef、PyMemberDef、PyGetSetDef、tp_init、tp_alloc、tp_new、tp_free。
  而installScript函数正式组合导出类所有函数属性成员。
继承C++类的python对象的生成。
  生成一个python对象既可以在python中生成,也可以在C++中生产python 对象,
  在python中生成对象跟其他普通python对象没什么区别,只是要实现PyTypeObject的tp_alloc。
   在C++中生产一个python对象 有两个关键步骤:
   
   1.  PyObject * pObject = PyType_GenericAlloc((PyTypeObject*)pyClass, 0);
   2.  Unit* pUnit = new (pObject) Unit(id);
   
  PyType_GenericAlloc使用python接口创建一个python对象内存空间,并且refcnt=1,
  大小什么的在PyTypeObject里面描述了,因为python是C语言实现,所以C++对象构造函数并没有执行,
  第二个步骤就是在某个内存中执行C++类的构造函数。

(这个思路 其实在暗黑战神服务器中也有类似步骤在lua中申请空间在C++中执行构造这样来看其实pythonlua在大的方向上其实并无二异)

C-PythonBinding
  C-PythonBinding 仅仅是使用pyscript的一个测试demo 实现自定义一个C++类 Unit,导出到python中,可供python类继承。
  C++实现的Unit类,导出到python中让python模块继承

python c python c

  python模块继承C++实现的Unit类

python c object

c-pythonbinding's People

Contributors

mirlegend avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.