2007年09月06日 星期四 21:04
ÎÒÏëʵÏÖÒ»¸ö¹¦ÄÜ£¬ÓÃC++´úÂëÃèÊöµÄÐÎʽÈçÏ£º void GetProperty(int nType, void* p) { switch(nType) { case 1: // È¡´°¿ÚX×ø±ê *((int*)p) = 100; break; case 2: // È¡´°¿ÚÃû³Æ strcpy((char*)p, "Ò»¸ö´°¿Ú"); break; }; } ʹÓ÷½Ê½ÈçÏ£º int nWindowPosX = 0; GetProperty(1, &nWindowPosX;) char szWindowText[256] = ""; GetProperty(2, szWindowText) printf("%d, %s", nWindowPosX, szWindowText); >> ´òÓ¡ÐÅÏ¢ 100, Ò»¸ö´°¿Ú ÎÒÏÖÔÚÒªÓÃboost pythonÀ©Õ¹Ò»¸öÀàËƵŦÄÜ£¬º¯Êý´ó¸ÅµÄ·½Ê½ÎÒÏëºÃÁË£¬¾ÍÊDz»ÖªµÀ Ôõô¸øpythonµÄobject¶ÔÏó¸³Öµ£º ÔÐÍÈçÏ£º void GetProperty(int nType, boost::python::object obj) { switch(nType) { case 1: // È¡´°¿ÚX×ø±ê // ??ÈçºÎ¸øobjÖµÒ»¸öintÐ͵ÄÖµ£¿ break; case 2: // È¡´°¿ÚÃû³Æ // ??ÈçºÎ¸øobj¸³Ò»¸öchar*Ð͵ÄÖµ£¿ break; }; } ʹÓ÷½Ê½£º >>nWindowPosX = 0 >>GetProperty(1, nWindowPosX) >>print nWindowPosX 100 >>szWindowText = ¡°¡± >>GetProperty(2, szWindowText) >>print szWindowText Ò»¸ö´°¿Ú Ò²¾ÍÊÇÒ»¸öPythonµÄ¶ÔÏó´«ÈëC++º¯Êýºó£¬ÈçºÎ¸øÕâ¸öPyObject¸³ÉÏÏàÓ¦Êý¾ÝÀàÐÍµÄ Öµ£¿ ²¢ÇÒ£¬ÈçºÎ¸øPyObject¸³Ò»¸ö×Ô¶¨ÒåµÄÀàÐÍ£¬±ÈÈçÎÒÏòPythonÀ©Õ¹ÁËÒ»¸öÀàMyClass£¬ ÈçºÎ ¸øPyObject¸³ÈëMyClassµÄÒ»¸ö¶ÔÏó£¿ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070906/932ea706/attachment.html
2007年09月06日 星期四 21:21
没用过 boost::python, 不过 C API 可以那么做,仅供参考。 // c type char* c_str; int c_int; // convert c type to PyObject PyObject* py_int = PyInt_FromLong(c_int); PyObject* py_str = PyString_FromString(c_str); if (!PyInt_Check(py_int) || !PyString_Check(py_str)) { // error ... } 李桃 写道: > > 我想实现一个功能,用C++代码描述的形式如下: > > void GetProperty(int nType, void* p) > > { > > switch(nType) > > { > > case 1: // 取窗口X坐标 > > *((int*)p) = 100; > > break; > > case 2: // 取窗口名称 > > strcpy((char*)p, "一个窗口"); > > break; > > }; > > } > > 使用方式如下: > > int nWindowPosX = 0; > > GetProperty(1, &nWindowPosX;) > > char szWindowText[256] = ""; > > GetProperty(2, szWindowText) > > printf("%d, %s", nWindowPosX, szWindowText); > > >> 打印信息 > > 100, 一个窗口 > > 我现在要用boost python扩展一个类似的功能,函数大概的方式我想好了,就是 > 不知道怎么给python的object对象赋值: > > 原型如下: > > void GetProperty(int nType, boost::python::object obj) > > { > > switch(nType) > > { > > case 1: // 取窗口X坐标 > > // ??如何给obj值一个int型的值? > > break; > > case 2: // 取窗口名称 > > // ??如何给obj赋一个char*型的值? > > break; > > }; > > } > > 使用方式: > > >>nWindowPosX = 0 > > >>GetProperty(1, nWindowPosX) > > >>print nWindowPosX > > 100 > > >>szWindowText = “” > > >>GetProperty(2, szWindowText) > > >>print szWindowText > > 一个窗口 > > 也就是一个Python的对象传入C++函数后,如何给这个PyObject赋上相应数据类 > 型的值? > > 并且,如何给PyObject赋一个自定义的类型,比如我向Python扩展了一个类 > MyClass,如何 > > 给PyObject赋入MyClass的一个对象? > > ------------------------------------------------------------------------ > > _______________________________________________ > python-chinese > Post: send python-chinese at lists.python.cn > Subscribe: send subscribe to python-chinese-request at lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request at lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese
2007年09月06日 星期四 22:21
ÄÇ×Ô¼ºÀ©Õ¹µÄ¶ÔÏóÈçºÎ¸³ÖµÄØ£¿ ÔÚ07-9-6£¬Alec <huanghao.c在gmail.com> дµÀ£º > > ûÓùý boost::python, > ²»¹ý C API ¿ÉÒÔÄÇô×ö£¬½ö¹©²Î¿¼¡£ > > // c type > char* c_str; > int c_int; > > // convert c type to PyObject > PyObject* py_int = PyInt_FromLong(c_int); > PyObject* py_str = PyString_FromString(c_str); > > if (!PyInt_Check(py_int) || !PyString_Check(py_str)) { > // error ... > } > > ÀîÌÒ Ð´µÀ: > > > > ÎÒÏëʵÏÖÒ»¸ö¹¦ÄÜ£¬ÓÃC++´úÂëÃèÊöµÄÐÎʽÈçÏ£º > > > > void GetProperty(int nType, void* p) > > > > { > > > > switch(nType) > > > > { > > > > case 1: // È¡´°¿ÚX×ø±ê > > > > *((int*)p) = 100; > > > > break; > > > > case 2: // È¡´°¿ÚÃû³Æ > > > > strcpy((char*)p, "Ò»¸ö´°¿Ú"); > > > > break; > > > > }; > > > > } > > > > ʹÓ÷½Ê½ÈçÏ£º > > > > int nWindowPosX = 0; > > > > GetProperty(1, &nWindowPosX;) > > > > char szWindowText[256] = ""; > > > > GetProperty(2, szWindowText) > > > > printf("%d, %s", nWindowPosX, szWindowText); > > > > >> ´òÓ¡ÐÅÏ¢ > > > > 100, Ò»¸ö´°¿Ú > > > > ÎÒÏÖÔÚÒªÓÃboost pythonÀ©Õ¹Ò»¸öÀàËƵŦÄÜ£¬º¯Êý´ó¸ÅµÄ·½Ê½ÎÒÏëºÃÁË£¬¾ÍÊÇ > > ²»ÖªµÀÔõô¸øpythonµÄobject¶ÔÏó¸³Öµ£º > > > > ÔÐÍÈçÏ£º > > > > void GetProperty(int nType, boost::python::object obj) > > > > { > > > > switch(nType) > > > > { > > > > case 1: // È¡´°¿ÚX×ø±ê > > > > // ??ÈçºÎ¸øobjÖµÒ»¸öintÐ͵ÄÖµ£¿ > > > > break; > > > > case 2: // È¡´°¿ÚÃû³Æ > > > > // ??ÈçºÎ¸øobj¸³Ò»¸öchar*Ð͵ÄÖµ£¿ > > > > break; > > > > }; > > > > } > > > > ʹÓ÷½Ê½£º > > > > >>nWindowPosX = 0 > > > > >>GetProperty(1, nWindowPosX) > > > > >>print nWindowPosX > > > > 100 > > > > >>szWindowText = "" > > > > >>GetProperty(2, szWindowText) > > > > >>print szWindowText > > > > Ò»¸ö´°¿Ú > > > > Ò²¾ÍÊÇÒ»¸öPythonµÄ¶ÔÏó´«ÈëC++º¯Êýºó£¬ÈçºÎ¸øÕâ¸öPyObject¸³ÉÏÏàÓ¦Êý¾ÝÀà > > Ð͵ÄÖµ£¿ > > > > ²¢ÇÒ£¬ÈçºÎ¸øPyObject¸³Ò»¸ö×Ô¶¨ÒåµÄÀàÐÍ£¬±ÈÈçÎÒÏòPythonÀ©Õ¹ÁËÒ»¸öÀà > > MyClass£¬ÈçºÎ > > > > ¸øPyObject¸³ÈëMyClassµÄÒ»¸ö¶ÔÏó£¿ > > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese -- ÈËÇîÖ¾Ò²ÇºÆÆø¹á³¤ºç -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070906/c4ee76b5/attachment.html
Zeuux © 2025
京ICP备05028076号