【发布时间】:2020-02-18 16:28:14
【问题描述】:
我想知道是否有办法在 python 代码中使用 c++ 函数
例如,经过研究,我确实找到了使用 .dll 文件的解决方案。 但是找不到功能 我的代码:
fun.cpp:
#include <iostream>
extern int add(int a, int b) {
return a+b;
}
int main()
{
std::cout << "Hello World! from C++" << std::endl;
return 0;
}
使用 cmd 编译:
g++ fun.cpp -o fun.dll
使用Python调用函数,ctypes:
from ctypes import *
import os
mydll = cdll.LoadLibrary("C:/Users/User/Desktop/ctypes/fun.dll")
result= mydll.add(10,1)
print("Addition value:-"+result)
但我遇到了这个错误:
Traceback(最近一次调用最后一次):文件 "c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\ptvsd_launcher.py", 第 43 行,在 主(ptvsdArgs)文件“c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py”, 第 432 行,主要 运行()文件“c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py”, 第 316 行,在 run_file 中 runpy.run_path(target, run_name='main') 文件“C:\Python36\lib\runpy.py”,第 263 行,在 run_path pkg_name=pkg_name, script_name=fname) 文件“C:\Python36\lib\runpy.py”,第 96 行,在 _run_module_code mod_name, mod_spec, pkg_name, script_name) 文件“C:\Python36\lib\runpy.py”,第 85 行,在 _run_code exec(code, run_globals) 文件“c:\Users\User\Desktop\ctypes\test.py”,第 5 行,在 result= mydll.add(10,1) 文件“C:\Python36\lib\ctypes__init__.py”,第 361 行,在 getattr 中 func = self.getitem(name) 文件“C:\Python36\lib\ctypes__init__.py”,第 366 行,在 getitem func = self._FuncPtr((name_or_ordinal, self)) AttributeError: function 'add' not found
【问题讨论】:
-
这很可能是名称混淆问题,请尝试让
add使用 C 调用约定,就像第一条评论中一样 -
也就是说:你要调用的函数应该是
extern "C"。 -
@MaxLanghof 我已经这样做了,但没有任何改变
-
好吧,你展示的代码不可能工作(除非你给 ctypes 改名)。
标签: python c++ windows dll ctypes