2014-01-06 134 views

回答

6

如果要调用一个函数命名GetRate实现这个功能,你可以做到这一点的:

from ctypes import * 
from ctypes.wintypes import * 

GetRate = windll.YOURLIB.GetRate 
GetRate.restype = c_int 
GetRate.argtypes = [HANDLE, POINTER(c_int)] 

# now call GetRate as something like: 
# 
# hDev = ... # handle 
# Data = c_int() 
# 
# GetRate(hDev, byref(Data)) # GetRate(hDev, &Data) 
# print Data 

,但如果你试图声明回调,函数指针,你可以做到这一点的(我认为你在寻找在前):

from ctypes import * 
from ctypes.wintypes import * 

def GetRate(hDev, pDate): 
    # Your implementation 
    return 0 

# you'll need GETRATE to pass it in the argtypes to the target function 
GETRATE = WINFUNCTYPE(c_int, HANDLE, POINTER(c_int)) 
pGetRate = GETRATE(GetRate) 

# now you can pass pGetRate as a callback to another function 
+0

感谢您的答复我一直在寻找的第一个,但是当我打印数据的答复是这样的'c_long(104)'为什么它不打印实际价值 – ganeshredcobra

+1

@ganeshredcobra我不知道哪里是从哪里来的,但'c_long(104)'是一个对象,你可以将它的内容打印为'c_int(104).value'。 – 2014-01-07 05:48:18

+1

@ ganeshredcobra:'c_int'在32位平台或Win64上是'c_long',但是作为一个结果得到一个ctypes数据类型是不可思议的。简单类型的getter将Python对象作为'restype'返回。 – eryksun