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中的__slots__示例详解
Jul 06 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
基于Python os模块常用命令介绍
Nov 03 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
python的依赖管理的实现
May 14 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
Django数据模型中on_delete使用详解
Nov 30 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 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遍历数组的几种方法
2012/03/22 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
js 图片转base64的方式(两种)
2018/04/24 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中random模块用法实例分析
2015/05/19 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
Django组件content-type使用方法详解
2019/07/19 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
行政专员岗位职责
2014/01/02 职场文书
请假条格式范文
2014/04/10 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL