diff --git a/example.cpp b/example.cpp index f1d63f9..dc26d7a 100644 --- a/example.cpp +++ b/example.cpp @@ -5,8 +5,17 @@ #include "ffpython.h" -#define TestGuard(X, Y) printf("-------%s begin-----------\n", X);try {Y;}catch(exception& e_){printf("exception<%s>\n", e_.what());}\ - printf("-------%s end-----------\n", X); +#define TestGuard(X, Y) \ + printf("-------%s begin---------\n", X); \ + try { \ + Y; \ + } \ + catch(exception& e_) \ + { \ + printf("exception<%s>\n", e_.what()); \ + } \ + printf("-------%s end-----------\n", X); \ + printf("\n"); void test_base(ffpython_t& ffpython) { @@ -33,9 +42,9 @@ void test_return_stl(ffpython_t& ffpython) ret_t val = ffpython.call("fftest", "test_return_stl"); } -static int print_val(int a1, int a2, const string& a3, const vector& a4) +static int print_val(int a1, double a2, const string& a3, const vector& a4) { - //printf("%s[%d,%f,%s,%d]\n", __FUNCTION__, a1, a2, a3.c_str(), a4.size()); + printf("%s[%d,%f,%s,%d]\n", __FUNCTION__, a1, a2, a3.c_str(), a4.size()); return 0; } struct ops_t @@ -48,12 +57,8 @@ struct ops_t } }; -void test_reg_function() +void test_reg_function( ffpython_t& ffpython) { - ffpython_t ffpython;//("ext1"); - ffpython.reg(&print_val, "print_val") - .reg(&ops_t::return_stl, "return_stl"); - ffpython.init("ext1"); ffpython.call("fftest", "test_reg_function"); } @@ -66,7 +71,7 @@ class foo_t } virtual ~foo_t() { - printf("%s\n", __FUNCTION__); + printf("%s<%d>\n", __FUNCTION__, m_value); } int get_value() const { return m_value; } void set_value(int v_) { m_value = v_; } @@ -112,7 +117,9 @@ void test_register_base_class(ffpython_t& ffpython) ffpython.reg_class("dumy_t", "dumy_t class inherit foo_t ctor ", "foo_t") .reg(&dumy_t::dump, "dump"); - ffpython.reg(obj_test, "obj_test"); + ffpython.reg(&obj_test, "obj_test") + .reg(&print_val, "print_val") + .reg(&ops_t::return_stl, "return_stl"); ffpython.init("ext2"); ffpython.call("fftest", "test_register_base_class"); @@ -120,7 +127,14 @@ void test_register_base_class(ffpython_t& ffpython) void test_register_inherit_class(ffpython_t& ffpython) { - ffpython.call("fftest", "test_register_inherit_class"); + foo_t* p = ffpython.call("fftest", "test_register_inherit_class"); + + if( p ) + { + printf( "p's value is %d\n", p->m_value ); + p->set_value( 3333 ); + printf( "p's value is %d\n", p->m_value ); + } }; void test_cpp_obj_to_py(ffpython_t& ffpython) @@ -137,8 +151,12 @@ void test_cpp_obj_py_obj(ffpython_t& ffpython) { dumy_t tmp_foo(2013); - //foo_t* p = ffpython.call("fftest", "test_cpp_obj_py_obj", &tmp_foo); - //p = NULL; + foo_t* p = ffpython.call("fftest", "test_cpp_obj_py_obj", &tmp_foo); + + if( p ) + printf( "p's value is %d\n", p->m_value ); + +// p = NULL; } void test_py_class_lambda(ffpython_t& ffpython) @@ -160,10 +178,10 @@ int main(int argc, char* argv[]) ffpython_t::add_path("./"); ffpython_t ffpython;//("ext2"); + TestGuard("test_register_base_class", test_register_base_class(ffpython)); TestGuard("test_base", test_base(ffpython)); TestGuard("test_stl", test_stl(ffpython)); - TestGuard("test_reg_function", test_reg_function()); - TestGuard("test_register_base_class", test_register_base_class(ffpython)); + TestGuard("test_reg_function", test_reg_function(ffpython)); TestGuard("test_register_inherit_class", test_register_inherit_class(ffpython)); TestGuard("test_cpp_obj_to_py", test_cpp_obj_to_py(ffpython)); diff --git a/ffpython.h b/ffpython.h index bfbf8d7..6bc84c0 100644 --- a/ffpython.h +++ b/ffpython.h @@ -1,4 +1,4 @@ -#ifndef __FFPYTHON_H_ +#ifndef __FFPYTHON_H_ #define __FFPYTHON_H_ #include @@ -1169,7 +1169,7 @@ class ffpython_t for (size_t i = 0; i < m_all_pyclass.size(); ++i) { m_all_pyclass[i].static_pytype_info->mod_name = m_mod_name; - if (false == m_all_pyclass[i].inherit_name.empty())//! ���ڻ��� + if (false == m_all_pyclass[i].inherit_name.empty())//! ??????? { pyclass_regigster_tool_t* inherit_class = get_pyclass_info_by_name(m_all_pyclass[i].inherit_name); assert(inherit_class && "base class must be registed"); @@ -1297,7 +1297,7 @@ class ffpython_t "import %s\n" "class %s(object):\n" "\t'''%s'''\n" - "\tdef __init__(self, %s assign_obj_ = 0):\n"//! ����init���� + "\tdef __init__(self, %s assign_obj_ = 0):\n"//! ????init???? "\t\t'''%s'''\n" "\t\tif True == isinstance(assign_obj_, %s):\n" "\t\t\tself.obj = assign_obj_\n" @@ -1315,7 +1315,7 @@ class ffpython_t string gen_class_str = buff; SAFE_SPRINTF(buff, sizeof(buff), - "\tdef delete(self):\n"//! ����init���� + "\tdef delete(self):\n"//! ????init???? "\t\t'''delete obj'''\n" "\t\tself.obj.delete()\n"); gen_class_str += buff; @@ -2044,7 +2044,7 @@ struct pytype_traits_t > static const char* get_typename() { return "map";} }; -//! ��ȡpython�����ķ���ֵ,������ +//! ???python??????????,?????? template class pytype_tool_impl_t: public pytype_tool_t { @@ -2898,7 +2898,7 @@ struct pyext_func_traits_t struct pyclass_ctor_tool_t { diff --git a/fftest.py b/fftest.py index 94e7efe..a09f8ae 100644 --- a/fftest.py +++ b/fftest.py @@ -1,4 +1,10 @@ +import ext2 +class tstSubClass(ext2.foo_t): + def __init__(self,data): + super(tstSubClass,self).__init__(data) + def showValue(self): + print 'tstSubClass:', self.m_value def test_base(a1, a2, a3): print('test_base', a1, a2, a3) @@ -15,13 +21,11 @@ def test_return_stl(): return ret def test_reg_function(): - import ext1 - ext1.print_val(123, 45.6 , "----789---", [3.14]) - ret = ext1.return_stl() + ext2.print_val(123, 45.6 , "----789---", [3.14]) + ret = ext2.return_stl() print('test_reg_function', ret) def test_register_base_class(): - import ext2 foo = ext2.foo_t(20130426) print("test_register_base_class get_val:", foo.get_value()) foo.set_value(778899) @@ -30,7 +34,6 @@ def test_register_base_class(): print('test_register_base_class test_register_base_class', foo) def test_register_inherit_class(): - import ext2 dumy = ext2.dumy_t(20130426) print("test_register_inherit_class get_val:", dumy.get_value()) dumy.set_value(778899) @@ -38,6 +41,10 @@ def test_register_inherit_class(): dumy.test_stl({"key": [11,22,33] }) dumy.dump() print('test_register_inherit_class', dumy) + a = tstSubClass(222) + a.showValue() + return a + def test_cpp_obj_to_py_ext(foo): print('test_cpp_obj_to_py_ext', len(foo)) @@ -45,7 +52,6 @@ def test_cpp_obj_to_py_ext(foo): print('test_cpp_obj_to_py_ext', k, foo[k].m_value) def test_cpp_obj_to_py(foo): - import ext2 print("test_cpp_obj_to_py get_val:", foo.get_value()) foo.set_value(778899) print("test_cpp_obj_to_py get_val:", foo.get_value(), foo.m_value) @@ -54,16 +60,16 @@ def test_cpp_obj_to_py(foo): print('test_cpp_obj_to_py test_register_base_class', foo) def test_cpp_obj_py_obj(dumy): - import ext2 print("test_cpp_obj_py_obj get_val:", dumy.get_value()) dumy.set_value(778899) print("test_cpp_obj_py_obj get_val:", dumy.get_value(), dumy.m_value) dumy.test_stl({"key": [11,22,33] }) dumy.dump() ext2.obj_test(dumy) + dumy.m_value = 100 print('test_cpp_obj_py_obj', dumy) - - return dumy + a = ext2.dumy_t(2000) + return a class pyclass_t: def __init__(self):