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

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

本文详解在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 相关产品和应用

全部下载

专题列表