Python论坛  - 讨论区

标题:[python-chinese] 问一个boost python的问题

2007年09月06日 星期四 21:04

李桃 taodev在gmail.com
星期四 九月 6 21:04:50 HKT 2007

ÎÒÏëʵÏÖÒ»¸ö¹¦ÄÜ£¬ÓÃ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 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月06日 星期四 21:21

Alec huanghao.c在gmail.com
星期四 九月 6 21:21:05 HKT 2007

没用过 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


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年09月06日 星期四 22:21

李桃(sky) taodev在gmail.com
星期四 九月 6 22:21:20 HKT 2007

ÄÇ×Ô¼ºÀ©Õ¹µÄ¶ÔÏóÈçºÎ¸³ÖµÄØ£¿

ÔÚ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 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号