如何用 C++ 为 Python 写 dll

如题所述

第1个回答  2015-05-26
1. 先新建一个名为 hello.cpp 的 C++ 源文件:
Cpp代码
#include <stdio.h>

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int __stdcall hello()
{
printf("Hello world!\n");
return 0;
}

2. 编译成 dll 文件:

Cpp代码
cl /LD hello.cpp

注意, 这里的参数是 /LD, 而不是 /DL。

3. 编写一个名为 hello.py 的 python 文件:

Python代码
# coding: utf-8

import os
import ctypes

CUR_PATH = os.path.dirname(__file__)

if __name__ == '__main__':
print 'starting...'
dll = ctypes.WinDLL(os.path.join(CUR_PATH, 'hello.dll'))
dll.hello()

4. 输出为:

Python代码
starting...
Hello world!

需要注意的地方:
1. C++ 的 dll 中的接口函数必须以 extern "C" __declspec(dllexport) 为前缀, C 的以 __declspec(dllexport) 为前缀。
否则会报错:

Python代码
Traceback (most recent call last):
File "hello.py", line 12, in <module>
dll.hello()
File "C:\Python25\lib\ctypes\__init__.py", line 361, in __getattr__
func = self.__getitem__(name)
File "C:\Python25\lib\ctypes\__init__.py", line 366, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'hello' not found本回答被提问者和网友采纳

C++加持让python程序插上翅膀——利用pybind11进行c++和python联合编程...
如上,我们ab函数,可以接收来自python的图像numpy数组,并将图像转化为了cv::mat格式,交给c++后续处理。最后返回numpy形式的g2o优化后的位姿数组:编译生成dll后改成导出模块同名文件的.pyd 将生成的dll改成g2opy.pyd 进入与c++依赖的同一个python环境,然后编辑简单的调用程序:两帧图像送入c++,优化计...

在C++ 中调用 Python 程序
编译和链接此C++程序时,需要链接Python库。在Linux环境下,可以使用如下命令编译:bash g++ -o call_python call_python.cpp -lpython3.8 在Windows环境下,类似命令如下,只需将库文件路径和名称调整为适当值:cmd cl call_python.cpp \/link \/LIBPATH:path_to_python.lib \/LIBPATH:path_to_python...

改写程序太麻烦?看Python如何直接调用C++程序 !
首先,确保您安装了GCC编译器。对于Windows平台,推荐使用MinGW,它提供了跨平台开发的基础支持。安装MinGW,确保与Python版本一致,安装路径默认为C:\\MinGW,并且在安装时,务必选择安装GCC和Objective-C编译器。将C:\\MinGW\\bin 添加至环境变量。若系统未自动刷新环境变量,重启计算机或手动通过命令行设置PATH...

Python与C++混合开发(VisualStudio+PyBind11)
步骤如下:1. 创建一个Visual Studio的C++动态链接库项目,详细步骤可参考作者之前的文章。2. 在GitHub上下载pybind11(版本2.11.1)和Eigen(版本3.4.0)的源码,将它们解压缩并放入项目文件的deps文件夹。3. 配置项目属性,包括添加包含目录(添加Python和Eigen库路径),库目录(Python的lib文件夹...

如何在Python中调用C\/C++函数
为了在Python中使用C\/C++函数,需要将C\/C++代码编译成动态链接库或可执行文件。在Linux系统下,可以使用gcc、g++等编译器;在Windows系统中,可以使用MinGW-w64或Visual Studio 2022等工具。在将编写好的C\/C++程序打包成动态链接库的过程中,需要考虑其在Python中的调用方式和依赖问题,确保正确加载所需的...

c++调用python
1. 首先要明白的是,所谓的python扩展(也就是你提供给python的c\/c++代码,不一定是c\/c++代码,可以是其他语言写的代码)是一个dll,并且这个dll放在本机python安装目录下的DLLs目录下(譬如我机器上的路径是:F:\/Program Files\/Python25\/DLLs),假如我们接下来要写的扩展module名为mb,python调用的代码...

在c++中嵌入python时,程序无法运行,原因是python27_d.dll丢失,如何解决...
你编译能成功可见python27的lib应该连接成了。如果动态链接库就在当前目录里,但是就是引用不成功,你可以试验使用filemon这个程序监控一下调用过程。来确认目录是否正确。如果loadlibrary不成功,通常是目录问题或者是程序版本问题。“安装目录下的DLL中”, 这句话有些费解。直接放在执行文件同一个目录中。

C++调用python脚本,那么这个程序可以在没有安装python环境的机器上...
可以。需要将python的dll附到可以引用的目录里。注意版本号,还有是否是调试版。DLL的编译器也要相同。如果是linux也需要将相应的so文件随你的发布程序放到相应的目录。通常可以放在同一个目录里。

如何利用DevC++编写Python模块
用pycharm写python不是更好吗。不过也可以使用dev c++将生成dll文件供python调用,可以参考win下使用dev c++将生成dll文件供python调用

SWIG:Python调用C++(新手保姆级示范
创建C++源文件(h和cpp),并在mod.i中编写接口声明和函数定义。运行`swig`命令将接口打包成模块,并生成setup.py。使用`python setup.py build_ext --inplace`编译模块。在Python中通过test.py调用C++函数,验证功能。需要注意的是,SWIG的一些细节需要注意,如使用%include简化工作、处理全局变量和函数...

相似回答