Windows下Python通过ctypes调用C++ DLL的完整指南
本文详解在Windows系统中如何使用Python直接调用C++编写的动态链接库(DLL)。内容涵盖VS2019中创建64位C++工程、配置导出宏与extern "C"声明、编译生成DLL,以及利用Python ctypes模块进行类型映射、函数调用和参数传递的完整代码示例。适用于Python 2.7及64位环境,提供从开发到测试的全流程操作指引。
开发环境与准备工作
本文基于Windows 10操作系统,使用Visual Studio 2019作为C++开发环境,Python版本为2.7.12(64位)。
C++动态库工程构建与编译
第一步,启动VS 2019,新建一个名为Example的C++ Windows动态链接库工程。将后续代码文件添加至工程中。若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文件。
Python调用DLL的测试代码
第二步,打开命令行工具(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的方法进行总结。
以上介绍了Windows系统下Python直接调用C++ DLL的具体方法,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!若觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









