4
我如何使用python的ctypes的Python ctypes的整数指针
extern int __stdcall GetRate(HANDLE hDev, int* pData)
如何设置数据类型,这样我可以打印的pData值
我如何使用python的ctypes的Python ctypes的整数指针
extern int __stdcall GetRate(HANDLE hDev, int* pData)
如何设置数据类型,这样我可以打印的pData值
如果要调用一个函数命名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
感谢您的答复我一直在寻找的第一个,但是当我打印数据的答复是这样的'c_long(104)'为什么它不打印实际价值 – ganeshredcobra
@ganeshredcobra我不知道哪里是从哪里来的,但'c_long(104)'是一个对象,你可以将它的内容打印为'c_int(104).value'。 – 2014-01-07 05:48:18
@ ganeshredcobra:'c_int'在32位平台或Win64上是'c_long',但是作为一个结果得到一个ctypes数据类型是不可思议的。简单类型的getter将Python对象作为'restype'返回。 – eryksun