Windows系统Python直接调用C++ DLL的方法


Posted in Python onAugust 01, 2019

环境:Window 10,VS 2019, Python 2.7.12, 64bit

1,打开 VS 2019,新建C++ Windows 动态链接库工程 Example,加入下列文件,如果Python是64位的则在VS中 Solution platforms 选择 x64 编译成64位的 DLL;

Example.h

#pragma once
#ifndef CPP_EXPORTS
#define CPP_EXPORTS
#endif
#ifdef CPP_EXPORTS
#define CPP_API _declspec(dllexport)
#else 
#define CPP_API _declspec(dllimport)
#endif
#include <iostream>
using namespace std;
#ifdef __cplusplus
extern "C"
{
#endif
  CPP_API int __cdecl getInt();
  CPP_API const char* __cdecl getString();
  CPP_API void __cdecl setString(const char* str);
#ifdef __cplusplus
}
#endif

Example.cpp

#include "pch.h"
#include "Example.h"
CPP_API int __cdecl getInt()
{
  return 5;
}
CPP_API const char* __cdecl getString()
{
  return "hello";
}
CPP_API void __cdecl setString(const char* str)
{
  cout << str << endl;
}

编译,得到 Example.dll

2, 打开 Command,cd 到 Example.dll 所在目录,输入 Python2,进入python环境

>>> from ctypes import *
>>> dll = CDLL("Example.dll")
>>> print dll.getInt()
5
>>> getStr = dll.getString
>>> getStr.restype = c_char_p
>>> pChar = getStr()
>>> print c_char_p(pChar).value
hello
>>> setStr = dll.setString
>>> setStr.argtypes = [c_char_p]
>>> pStr = create_string_buffer("hello")
>>> setStr(pStr)
hello
-1043503984

总结

以上所述是小编给大家介绍的Windows系统Python直接调用C++ DLL的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
Python中获取对象信息的方法
Apr 27 Python
在Django的视图中使用form对象的方法
Jul 18 Python
Python绘制七段数码管实例代码
Dec 20 Python
python3.5基于TCP实现文件传输
Mar 20 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
python基于Selenium的web自动化框架
Jul 14 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
python tqdm用法及实例详解
Jun 16 Python
Python CVXOPT模块安装及使用解析
Aug 01 #Python
Python Selenium 之数据驱动测试的实现
Aug 01 #Python
Python 一键获取百度网盘提取码的方法
Aug 01 #Python
Django中的静态文件管理过程解析
Aug 01 #Python
pycharm 批量修改变量名称的方法
Aug 01 #Python
python腾讯语音合成实现过程解析
Aug 01 #Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 #Python
You might like
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
PHP中常用的转义函数
2014/02/28 PHP
php HTML无刷新提交表单
2016/04/05 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
Django 路由层URLconf的实现
2019/12/30 Python
学习Python列表的基础知识汇总
2020/03/10 Python
python文件排序的方法总结
2020/09/13 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
党的群众路线教育实践活动总结
2014/10/30 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
九年级数学教学反思
2016/02/17 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python