C.dll 如何向 Python 公开变量?
Posted
技术标签:
【中文标题】C.dll 如何向 Python 公开变量?【英文标题】:How can C.dll expose variable to Python? 【发布时间】:2017-05-26 01:22:42 【问题描述】:我正在尝试将 C 主程序写入 dll,Python 将从该 dll 导入所有内容(包括所有变量和函数),并运行 dll 中定义的函数。但是,我打算不仅将函数导出,还将变量从 DLL 导出到 Python。 我了解如何使用 DLL 向 Python 公开函数,但我不确定如何在 Python 中使用 Ctype 从 dll 访问变量。
我们举个例子: 如果在标题内,我们有#DEFINE MAXDEVNUMBER 4。 当我使用 ctype print mydll.MAXDENUMBER 它给我一个错误。未找到函数“MAXDENUM”
【问题讨论】:
【参考方案1】:您无法访问预处理器宏,因为它们不是从 DLL 导出的。您只能访问导出的 C 函数和全局变量。
例如,test.c:
__declspec(dllexport) int b = 5;
__declspec(dllexport) int func(int a)
return a + b;
>>> from ctypes import * >>> dll = CDLL('test') >>> dll.func(1) 6 >>> x=c_int.in_dll(dll,'b') # access the global variable >>> x.value 5 >>> x.value = 6 # change it >>> dll.func(1) 7
【讨论】:
暴露一个数组怎么样?到 Python? 使用正确的类型。例如:x = (c_int * 10).in_dll(dll,'b')
访问int b[10]
。
谢谢先生。你是英雄。现在一切正常!
Tolnen 二维数组呢?
(c_int * 10 * 5)
为int b[5][10]
。注意索引是相反的。以上是关于C.dll 如何向 Python 公开变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 boost/python 向 python 公开 C++ 虚函数?
如何使用 Cython 向 Python 公开返回 C++ 对象的函数?
如何使用 Typescript Vue 组件向外部公开数据?