Ayuda con Python Ctypes y Nvapi.

Mi objective final es consultar NVAPI para el uso de gpu y otras estadísticas en python. Ver http://developer.nvidia.com/nvapi

from ctypes import WinDLL nvapi = WinDLL("nvapi.dll") print nvapi#  print nvapi.nvapi_QueryInterface#  print nvapi.nvapi_QueryInterface()# returns 0 print nvapi.NvAPI_Initialize# AttributeError: function 'NvAPI_Initialize' not found print nvapi.NvAPI_SYS_GetChipSetInfo# AttributeError: function 'NvAPI_SYS_GetChipSetInfo' not found 

Aquí hay una copia del archivo de encabezado disponible para descargar desde el enlace anterior: http://paste.pound-python.org/show/7337/

En este punto, estoy tratando de familiarizarme con la API … así que, ¿qué estoy haciendo mal? No puedo averiguar cómo llamar a cualquiera de las funciones enumeradas en el archivo de encabezado.

Tomado de su comentario:

La llamada NvAPI_Initialize todavía falla. diciendo que la función no se encuentra.

NvAPI_Initialize no se exporta de la biblioteca dinámica nvapi.dll. Es un símbolo contenido en nvapi.lib, la biblioteca estática incluida con el SDK de NVIDIA, por lo que no es de extrañar que no pueda llamarlo usando Python.

Honestamente, la ruta más fácil aquí es crear un pequeño contenedor DLL en C, enlazando estáticamente a nvapi.lib y exponiendo una interfaz amigable para Python.

¿Estás seguro de que es un WinDLL? Desde el archivo de encabezado, me parece una convención estándar de llamadas a C. ¿Has probado CDLL en CDLL lugar?

EDITAR :

Ya lo veo. El encabezado al que nvapi.dll no es en realidad la interfaz para nvapi.dll –es una envoltura que debe estar enlazada estáticamente.

De los documentos descargados del sitio de desarrolladores de NVIDIA :

Usa un enlace estático con aplicaciones

NvAPI no se puede vincular dinámicamente a las aplicaciones. Debe crear un enlace estático a la biblioteca y luego llamar a NvAPI_Initialize (), que carga nvapi.dll dinámicamente.

Si los controladores NVIDIA no están instalados en el sistema o nvapi.dll no está presente cuando la aplicación llama a NvAPI_Initialize (), la llamada simplemente devuelve un error. La aplicación todavía se cargará.

Supongo que las llamadas reales en nvapi.dll son completamente diferentes a las expuestas en esta biblioteca de envoltura. Aunque no puedo encontrar ninguna documentación sobre eso. Quizás sean internos y cambien entre sistemas.

Si desea utilizar esta interfaz, no estoy realmente seguro de cuál es la mejor solución. Es una biblioteca estática y no dinámica, por lo que ctypes no lo manejaría a menos que lo envolviera en otra DLL. No soy un experto en código nativo con Python, así que tal vez alguien más tenga una solución fácil. Lo siento.