首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于python ctype和nvapi的帮助

关于python ctype和nvapi的帮助
EN

Stack Overflow用户
提问于 2011-05-29 02:55:49
回答 2查看 1.2K关注 0票数 5

我的最终目标是在python中查询NVAPI的gpu使用情况和其他统计数据。请参阅http://developer.nvidia.com/nvapi

代码语言:javascript
复制
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

下面是可从上面的链接下载的头文件的副本:http://paste.pound-python.org/show/7337/

在这一点上,我只是想让自己熟悉一下api...那么我到底做错了什么呢?我不知道如何调用头文件中列出的任何函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-29 06:37:53

摘自你的评论:

NvAPI_Initialize调用仍然失败。说找不到函数。

不会从动态库nvapi.dll中导出NvAPI_Initialize。它是NVIDIA SDK附带的静态库nvapi.lib中包含的符号,因此您无法使用Python调用它也就不足为奇了。

老实说,这里最简单的方法是用C语言创建一个小的包装器DLL,静态链接到nvapi.lib,并向Python公开一个友好的接口。

票数 0
EN

Stack Overflow用户

发布于 2011-05-29 05:32:58

你确定是WinDLL吗?从头文件看,它看起来像是一个标准的C调用约定。你有没有尝试过CDLL呢?

编辑

我现在明白了。您所指向的头实际上并不是nvapi.dll的接口--它是必须静态链接的包装器。

NVIDIA's developer site下载的文档

通过Applications使用静态链接

NvAPI不能动态链接到应用程序。您必须创建一个指向该库的静态链接,然后调用动态加载nvapi.dll的NvAPI_Initialize()。

如果系统上未安装NVIDIA驱动程序,或者应用程序调用NvAPI_Initialize()时nvapi.dll不存在,则该调用将返回错误。应用程序仍将加载。

我猜nvapi.dll中的实际调用与这个包装器库中公开的完全不同。不过,我似乎找不到任何关于这些的文档。也许它们是内部的,并且在系统之间变化。

如果你想使用这个接口,我真的不确定最好的解决方案是什么。它是一个静态库,而不是一个动态库,所以除非您将它包装在另一个DLL中,否则ctype不会处理它。我不是Python原生代码方面的专家,所以也许其他人会有一个简单的修复方法。抱歉的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6163770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档