我已经挣扎了近一个星期,也许有人可以帮助我吗?简而言之,我用C ++编写了一个程序,并希望将它与Python链接(用Flask或Django构建Web应用程序)。
我的C函数会返回int,char或void工作正常,问题是它们应该返回一个字符串。我或多或少地理解问题的原因是什么(我的C函数返回一个指针,我的Python函数不能将其作为一个有用的数据处理)。
所以这是我写的一个示例代码。在我的main.cpp文件中,我有以下功能:
extern "C" {
int addint(int a) {
return a + 1;
}
const char* hello() {
return "hello";
}
}
在我的pywrapper.py文件中,我有以下内容:
def addint(number):
result = lib.addint(c_int(number))
return result
def saystr():
result = lib.hello()
return result
if __name__ == "__main__":
print('addint: ', addint(5))
print('saystr: ', saystr())
我的输出是:
addint: 6
saystr: -354261249
所以第一个功能正常。但是我能为第二个函数做什么才能返回' hello'
答案 0 :(得分:1)
作为ctypes documentation shows,您需要明确告诉它如何处理返回类型:
def saystr():
lib.hello.restype = c_char_p # pointer to a string
result = lib.hello()
return result
否则默认返回类型为int
(并且返回的指针将转换为整数地址)。