2014-01-06 2 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'. –

+1

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

Смежные вопросы