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号