help with python ctypes and nvapi
Question: My end goal is to query NVAPI for gpu usage and other statistics in python.
See <http://developer.nvidia.com/nvapi>

    
    
    from ctypes import WinDLL
    nvapi = WinDLL("nvapi.dll")
    print nvapi# <WinDLL 'nvapi.dll', handle 718a0000 at 27c0050>
    print nvapi.nvapi_QueryInterface# <_FuncPtr object at 0x026D8E40>
    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
    

Here is a copy of the header file available for download from the link above:
<http://paste.pound-python.org/show/7337/>

At this point, I am just trying to familiarize myself with the api... so what
am I doing wrong? I can't figure out how to call any of the functions listed
in the header file.


Answer: Are you sure it's a WinDLL? From the header file, it looks like a standard C
calling convention to me. Have you tried `CDLL` instead?

**EDIT** :

I see now. The header you pointed to isn't actually the interface for
`nvapi.dll`\--it is a wrapper around it that must be statically linked.

From the docs downloaded from [NVIDIA's developer
site](http://developer.nvidia.com/nvapi):

> **Use a Static Link with Applications**
>
> NvAPI cannot be dynamically linked to applications. You must create a static
> link to the library and then call NvAPI_Initialize(), which loads nvapi.dll
> dynamically.
>
> If the NVIDIA drivers are not installed on the system or nvapi.dll is not
> present when the application calls NvAPI_Initialize(), the call just returns
> an error. The application will still load.

I would guess that the actual calls in `nvapi.dll` are completely different
than the ones exposed in this wrapper library. I can't seem to find any
documentation on those though. Perhaps they are internal and change between
systems.

If you want to use this interface, I'm not really sure what the best solution
is. It's a static library and not a dynamic one, so ctypes wouldn't handle it
unless you wrapped it in another DLL. I'm not an expert at native code with
Python, so maybe someone else will have an easy fix. Sorry.

