c-ctypes Python动态函数调用



我正在用Python编写一个测试脚本,用ctypes-ctypes-初学者调用C函数

我有一个函数列表和相应的共享对象名称,需要使用python脚本动态调用这些函数。

虽然我用它直接调用Python脚本中的函数名,但它工作得很好,并在终端上打印"helloworld"!

Python脚本:

import ctypes
import os
sharedObjectPath = (os.getcwd() + "/" + "sharedObject.so")
test = ctypes.CDLL(sharedObjectPath)
test.printHello()

C代码:

#include < stdio.h>
void printHello(void);
void printHello()
{
    printf("hello worldn");
}

但是,它在尝试使用变量加载函数名时抛出错误:

Python脚本:(动态函数调用)

import ctypes
import os
sharedObjectPath = (os.getcwd() + "/" + "sharedObject.so")
test = ctypes.CDLL(sharedObjectPath)
fName = "printHello()"
test.fName

错误:"完整路径"/sharedObject.so:未定义的符号:fName

我们非常感谢您的帮助和建议!谢谢

要使用函数名称作为字符串来调用函数,您可以执行以下

...    
fName = "printHello"
test[fName]()

因此,函数名称(减去())用于索引模块对象,然后调用它。

最新更新