全部博文(140)
分类: Python/Ruby
2014-04-12 00:28:31
返回值类型跟函数的参数类型一样,可以有多种情况。在上一篇介绍指针的类型时,我试图利用pi=lib.add(pi)的形式,接收函数返回的指针。结果pi的类型转变为
函数一般返回
>>> pi = pointer(c_int())
>>> lib.add.restype = type(pi) //type函数还是很有用的嘛!
>>> pi=lib.add( pointer(c_int(1000)) )
>>> pi
<__main__.LP_c_long object at 0xa04a4f4>
>>> pi.contents
c_long(1100)
>>> strchr("abcdef", ord("d"))
8059983( 返回的内容为
) >>> strchr.restype = c_char_p # c_char_p is a pointer to a string
>>> strchr("abcdef", ord("d")) #返回的类型为
? 这是为什么? 'def'
>>> print strchr("abcdef", ord("x"))
None //返回指针为NULL
>>>
>>> strchr.restype = c_char_p
>>> strchr.argtypes = [c_char_p, c_char]
>>> strchr("abcdef", "d")
'def'
>>> strchr("abcdef", "def") //这里体现了安全性检查
Traceback (most recent call last):
File "", line 1, in ? ArgumentError: argument 2: exceptions.TypeError: one character string expected
>>> print strchr("abcdef", "x")
None
>>> GetModuleHandle = windll.kernel32.GetModuleHandleA # doctest: +WINDOWS
>>> def ValidHandle(value): //value是整数
... if value == 0:
... raise WinError()
... return value
>>>
>>> GetModuleHandle.restype = ValidHandle
>>> GetModuleHandle(None)
486539264
>>> GetModuleHandle("something silly")
Traceback (most recent call last):
File "", line 1, in ? File "
", line 3, in ValidHandle WindowsError: [Errno 126] The specified module could not be found.
>>>
>>> libc.strcat.restype=c_char_p
>>> c="1234567"
>>> a="123"
>>> libc.strcat(c,a)
'123456723212321123' //得到的结果是错误的。
>>> c=create_string_buffer("1234567",30)
>>> a=create_string_buffer("123",30)
>>> print repr(c.raw)
'1234567\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> libc.strcat(c,a)
'1234567123' //得到的结果是正确的
>>> c.raw
'1234567123\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
这种方法应该也行:(c_char * 10)()