Python调用C++动态库

1.要用到的C++动态库工程
在这里插入图片描述
ArrayTool.h

#ifndef ARRAY_TOOL_H
#define ARRAY_TOOL_H

#ifdef MYLIBRARY_EXPORTS
#define MYLIBRARY_API __declspec(dllexport)  // 导出符号
#else
#define MYLIBRARY_API __declspec(dllimport)  // 导入符号
#endif

// 声明一个导出函数
extern "C" MYLIBRARY_API int MaxNum(int first_num, int second_num);

#endif // !ARRAY_TOOL_H

ArrayTool.cpp

#define MYLIBRARY_EXPORTS // 为了让导出符号有效,所以才需要定义这个宏
#include "ArrayTool.h"

// 返回 first_num 和 second_num 中的最大值
int MaxNum(int first_num, int second_num)
{
	return first_num > second_num ? first_num : second_num;
}

2.python工程目录
在这里插入图片描述
2.将所要用到的C++动态库放在python项目目录下,如下图:
在这里插入图片描述
PyCharm会自动加载C++动态库:
在这里插入图片描述
3.编写python代码:main.py

import ctypes, ctypes.util  # ctypes 是 Python 的内置库,主要用于在 Python 中调用动态链接库


# 查找动态库
def find_dll(dll_name):
    return ctypes.util.find_library(dll_name)  # 查找DLL


# 加载动态库
def load_dll(dll_path):
    try:
        vc_dll = ctypes.CDLL(dll_path)  # 加载动态库,若失败抛出异常
        vc_func = vc_dll.MaxNum  # 取动态库的函数
        max_num = vc_func(0,3)  # 调用动态库函数
        print("max_num:"+str(max_num))
    except OSError as e:
        print(e, "加载DLL失败")

# 主函数入口
if __name__ == "__main__":
    dll_path = find_dll("DLLDemo.dll")
    if dll_path:
        load_dll(dll_path)
    else:
        print("动态库路径不对")

4.执行python程序时会报错:[WinError 193] %1 不是有效的 Win32 应用程序。
原因如下图所示,因为此时我们用的动态库是32位的,但是python是64位的:
在这里插入图片描述
解决方法如下图所示,将动态库改成64位即可:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值