wenzai 发表于 2021-12-31 14:55:21

在用ctypes进行C++和python的混合编程遇到了点问题想请教一下各位

我将一个可以返回字符串(char*)的C++函数封装了起来,然后在python中调用它,结果python中始终只能读取到字符串的第一个字符
python的代码,calculator是我封装的dll文件:
import ctypes
bignumber = ctypes.CDLL( "calculator")bignumber.add.restype = ctypes.c_char_pa = bignumber.add( "123", "123")
print(a)

运行结果是b'2'
这是C++ 那个函数(add)中的代码

answer = (char*)malloc(sizeof(char)*results.size());
strcpy(answer,(char* )results.c_str());
return answer;


人造人 发表于 2021-12-31 20:01:01

本帖最后由 人造人 于 2021-12-31 20:05 编辑

不知道你是怎么操作的,而且你的代码也不完整
还有,你的图片怎么弄成付费的了,要4鱼币才能看?
$ ls
main.cppmain.py
$ cat main.cpp
#include <iostream>

extern "C" void put_string(const char *str) {
    std::cout << str << std::endl;
}

extern "C" const char *get_string(void) {
    return "hello world!";
}
$ g++ -shared -fPIC -g -Wall -o main.so main.cpp
$ ls
main.cppmain.pymain.so
$ cat main.py
#!/usr/bin/env python
#coding=utf-8

from ctypes import *

main = cdll.LoadLibrary('./main.so')
main.put_string.argtypes =
main.put_string(b'abcd')

main.get_string.restype = c_char_p
print(main.get_string())
$ ./main.py
abcd
b'hello world!'
$

Gacy 发表于 2022-1-1 15:59:50

人造人 发表于 2021-12-31 20:01
不知道你是怎么操作的,而且你的代码也不完整
还有,你的图片怎么弄成付费的了,要4鱼币才能看?

付费才能看啊哈哈哈

wenzai 发表于 2022-1-2 17:01:20

人造人 发表于 2021-12-31 20:01
不知道你是怎么操作的,而且你的代码也不完整
还有,你的图片怎么弄成付费的了,要4鱼币才能看?

我靠不好意思哈哈哈,我本来是悬赏的
页: [1]
查看完整版本: 在用ctypes进行C++和python的混合编程遇到了点问题想请教一下各位