【问题标题】:How can C.dll expose variable to Python?C.dll 如何向 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”

【问题讨论】:

    标签: python c++ c dll ctypes


    【解决方案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]。注意索引是相反的。
    猜你喜欢
    • 2020-11-16
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2016-06-27
    相关资源
    最近更新 更多