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开发实例分享bt种子爬虫程序和种子解析
May 21 Python
Python多进程同步Lock、Semaphore、Event实例
Nov 21 Python
Python类定义和类继承详解
May 08 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
python 文件转成16进制数组的实例
Jul 09 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
python cumsum函数的具体使用
Jul 29 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
python常用运维脚本实例小结
Feb 14 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
php实现数据库的增删改查
2017/02/26 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
JS 判断代码全收集
2009/04/28 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
JS中Location使用详解
2015/05/12 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
国庆节文艺活动方案
2014/02/03 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
请假条的格式
2014/04/11 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
R9700摩机记
2022/04/05 无线电