Windows下Python通过ctypes调用C++ DLL的完整指南

纸上星河
纸上星河
发布时间:2026-10-13| 6人浏览过
原创

本文详解在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的具体方法,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!若觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。