pythton 调用 so 共享库不能转换参数类型

2008-06-02 Thread windwiny
 我初学python 的 ctypes, 现在的环境是 ubuntu 8.04, Python 2.5.2 (r252:60911,
May  7 2008, 15:19:09) , gcc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
我创建了一个 so 共享库
-
#include  
double myfd(double x)  {return x * 2;}
float myff(float x)  {  return x * 3;}
int myfi(int x)  {  return x * 4 ;}
-
用 gcc -shared a.c  -o liba.so  来生成了一个 liba.so ,
用其它 c 程序链接这个库,里面的函数是能正确运行的
我写了一个python 程序
-
# coding:utf-8
import ctypes as dll
p = dll.cdll.LoadLibrary("./liba.so")
print p.myfi(8)   # 得32,正确
try:
  print p.myfd(0.3) # 出错
except:
  print "except myfd()"
try:
  print p.myff(0.4) # 出错
except:
  print "except myff()"
-
出错提示为 ctypes.ArgumentError: argument 1: :
Don't know how to convert parameter 1

这是什么原因?


--
http://mail.python.org/mailman/listinfo/python-list

Re: pythton 调用 so 共享库不能转换参数类 型

2008-06-03 Thread windwiny
On Jun 3, 3:19 pm, "Mark Tolonen" <[EMAIL PROTECTED]> wrote:
> "windwiny" <[EMAIL PROTECTED]> wrote in message
>
> news:[EMAIL PROTECTED]
>
>
>
> > 我初学python 的 ctypes, 现在的环境是 ubuntu 8.04, Python 2.5.2
> > (r252:60911,
> > May  7 2008, 15:19:09) , gcc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
> > 我创建了一个 so 共享库
> > -
> > #include  
> > double myfd(double x)  { return x * 2;}
> > float myff(float x)  { return x * 3;}
> > int myfi(int x)  { return x * 4 ;}
> > -
> > 用 gcc -shared a.c  -o liba.so  来生成了一个 liba.so ,
> > 用其它 c 程序链接这个库,里面的函数是能正确运行的
> > 我写了一个python 程序
> > -
> > # coding:utf-8
> > import ctypes as dll
> > p = dll.cdll.LoadLibrary("./liba.so")
>
> p.myfd.argtypes = [dll.c_double]
> p.myfd.restype = dll.c_double
> p.myff.argtypes = [dll.c_float]
> p.myff.restype = dll.c_float
>
> > print p.myfi(8)   # 得32,正确
> > try:
> >   print p.myfd(0.3) # 出错
> > except:
> >   print "except myfd()"
> > try:
> >   print p.myff(0.4) # 出错
> > except:
> >   print "except myff()"
> > -
> > 出错提示为 ctypes.ArgumentError: argument 1:  > 'exceptions.TypeError'>:
> > Don't know how to convert parameter 1
>
> > 这是什么原因?
>
> --Mark (马克)

噢,原来还要设置参数和返回值类型。 谢了
--
http://mail.python.org/mailman/listinfo/python-list