Если вы хотите вызвать функцию с именем 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'. –
@ganeshredcobra: 'c_int' является' c_long' на 32-битных платформах или Win64, но немыслимо, что вы получаете тип данных ctypes. Простые типы имеют getters, которые возвращают объекты Python как 'restype'. – eryksun