python如何实现类似C++一样调用动态库

python-调用动态链接库dll/so的方法 使用python ctyeps CDLL来调用linux下的so动态链接库或windows下的dll动态链接库 阅读详情

多种实现方案,核心思路是将可变的核心业务逻辑抽离到动态库/可动态加载的模块中,主程序EXE仅保留固定的加载和调用逻辑,后续更新只需替换动态库,无需重新打包EXE。

下面详细介绍几种可行方案,从简单到进阶,兼顾易用性和实用性:

一、方案1:最简易——Python动态加载.py模块(无需编译,快速落地)

这是最轻量化的方案,无需处理编译相关的复杂操作,核心是利用Python的importlib标准库,实现运行时动态加载/重新加载.py模块,主程序打包为EXE后,只需替换.py模块文件即可更新逻辑。

核心原理

  1. 主程序(打包为EXE):仅负责动态加载业务模块、提供调用入口,逻辑固定不变;
  2. 业务模块(单独存放的.py文件):存放可变的核心逻辑(如你的手机拍照测试数据处理、上传逻辑);
  3. 后续更新:直接修改/替换.py业务模块,无需重新打包EXE,主程序下次运行(或热重载)即可加载新逻辑。

实现步骤

步骤1:拆分主程序和业务模块
  • 业务模块:business_logic.py(可变,后续可更新,不打包进EXE)

    # 核心业务逻辑(示例:手机测试结果处理)
    def handle_test_result(phone_sn, photo_path):
        """处理手机拍照测试结果(可变逻辑,后续可优化更新)"""
        print(f"正在处理SN号:{phone_sn} 的测试照片:{photo_path}")
        # 此处可放置实际的上传、数据校验等逻辑
        result = {
            "code": 0,
            "msg": "处理成功",
            "phone_sn": phone_sn,
            "photo_path": photo_path,
            "handle_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
        return result
    
    def get_test_version():
        """返回业务模块版本(便于确认是否更新成功)"""
        return "v1.0.0"
    
  • 主程序:main.py(固定逻辑,后续打包为EXE)

    import importlib
    import os
    import sys
    from datetime import datetime
    
    def load_business_module(module_name="business_logic"):
        """
        动态加载业务模块
        :param module_name: 业务模块名称(无需.py后缀)
        :return: 加载成功的模块对象
        """
        # 确保业务模块在可搜索路径中(优先当前EXE运行目录)
        exe_dir = os.path.dirname(sys.executable) if hasattr(sys, 'frozen') else os.getcwd()
        sys.path.append(exe_dir)
        
        try:
            # 动态导入模块(支持重新加载,避免缓存)
            if module_name in sys.modules:
                return importlib.reload(sys.modules[module_name])
            else:
                return importlib.import_module(module_name)
        except ModuleNotFoundError:
            raise Exception(f"未找到业务模块 {module_name}.py,请将其放置在EXE同目录下")
        except Exception as e:
            raise Exception(f"加载业务模块失败:{str(e)}")
    
    if __name__ == "__main__":
        # 固定逻辑:加载业务模块 + 调用核心方法
        try:
            # 1. 动态加载业务模块
            business_mod = load_business_module()
            
            # 2. 调用业务模块的方法(固定调用接口,业务模块内部可更新)
            print(f"当前业务模块版本:{business_mod.get_test_version()}")
            test_result = business_mod.handle_test_result("SN123456789", "./test_photo.jpg")
            print(f"测试结果处理完成:{test_result}")
            
        except Exception as e:
            print(f"程序运行失败:{str(e)}")
        input("按回车键退出...")
    
步骤2:打包主程序为EXE

使用pyinstaller打包main.py,注意排除业务模块business_logic.py:

# 安装pyinstaller
pip install pyinstaller

# 打包命令(--onefile打包为单个EXE,--exclude-module排除业务模块)
pyinstaller -F main.py --exclude-module business_logic
步骤3:运行与更新
  1. 打包完成后,将business_logic.py复制到EXE所在目录;
  2. 运行EXE,即可正常调用业务模块逻辑;
  3. 后续更新:直接修改business_logic.py(如优化handle_test_result逻辑、更新版本号),替换EXE同目录下的该文件,重新运行EXE即可加载新逻辑,无需重新打包。

方案优势与局限

  • 优势:零编译、操作简单、学习成本低,适合快速迭代的业务逻辑;
  • 局限:.py文件源码暴露,安全性较低;仅支持Python语法,无法调用C/C++等底层逻辑。

二、方案2:进阶——调用Python编译的.pyd动态库(隐藏源码,性能提升)

.pyd文件是Python的动态链接库(Windows平台,对应Linux的.so文件),本质是将Python代码编译为二进制动态库,既可以隐藏源码,又能实现「更新无需重打包EXE」的效果,核心逻辑与方案1一致,只是将.py模块替换为.pyd动态库。

核心原理

  1. 将可变业务逻辑的.py文件编译为.pyd动态库;
  2. 主程序(EXE)通过importlib动态加载.pyd文件,调用方式与.py模块完全一致;
  3. 后续更新:只需编译新的.pyd文件,替换EXE同目录下的旧文件即可,无需重打包EXE。

实现步骤

步骤1:编译.py业务模块为.pyd

使用cython将business_logic.py编译为.pyd(隐藏源码+提升运行性能):

  1. 安装依赖:
    pip install cython
    
  2. 创建编译脚本setup.py:
    from setuptools import setup
    from Cython.Build import cythonize
    import os
    
    # 要编译的Python文件
    py_file = "business_logic.py"
    
    setup(
        name="PhoneTestBusinessLogic",
        ext_modules=cythonize(
            py_file,
            language_level=3,  # 对应Python3版本
            annotate=False  # 是否生成注释文件,默认False
        ),
        zip_safe=False
    )
    
  3. 执行编译命令:
    python setup.py build_ext --inplace
    
  4. 编译完成后,会在当前目录生成business_logic.cp3x-win_amd64.pyd(cp3x对应你的Python版本,如cp39对应Python3.9),可将其重命名为business_logic.pyd(方便调用)。
步骤2:主程序加载.pyd动态库

主程序main.py无需修改(与方案1完全一致),importlib会自动识别.pyd文件并加载,调用方式与.py模块无差异。

步骤3:打包与更新
  1. 打包main.py为EXE(排除business_logic相关文件);
  2. 将business_logic.pyd复制到EXE同目录下,运行EXE即可正常调用;
  3. 后续更新:修改business_logic.py后,重新编译为.pyd,替换旧文件即可,无需重打包EXE。

方案优势与局限

  • 优势:源码隐藏、运行性能比纯.py高、调用方式兼容,兼顾安全性和易用性;
  • 局限:需要掌握cython编译技巧,跨平台兼容性稍差(Windows为.pyd,Linux为.so)。

三、方案3:终极——调用C/C++编译的动态库(.dll/.so,高性能+跨语言)

这是与C++调用动态库完全一致的方案,Python通过ctypes(标准库)或cffi(第三方库)调用C/C++编译的.dll(Windows)/.so(Linux)动态库,核心业务逻辑用C/C++实现并编译为动态库,主程序(Python EXE)仅负责调用动态库接口,后续更新只需替换.dll/.so文件,无需重打包EXE。

核心原理

  1. C/C++编写核心业务逻辑,暴露标准C接口(避免C++名称修饰问题);
  2. 将C/C++代码编译为.dll/.so动态库;
  3. Python主程序通过ctypes加载动态库,调用暴露的接口;
  4. 后续更新:修改C/C++代码,重新编译为动态库,替换旧文件即可,无需重打包Python EXE。

实现步骤(以Windows平台.dll为例)

步骤1:C/C++编写并编译.dll动态库
  • 编写C代码:business_core.c(核心业务逻辑,暴露C接口)

    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    
    // 定义返回结果的结构体(与Python端对应)
    typedef struct {
        int code;
        char msg[128];
        char phone_sn[64];
        char photo_path[256];
        char handle_time[32];
    } TestResult;
    
    // 暴露C接口(extern "C" 避免C++名称修饰,C代码可省略)
    #ifdef _WIN32
    #define DLL_EXPORT __declspec(dllexport)
    #else
    #define DLL_EXPORT
    #endif
    
    // 获取当前时间字符串
    static void get_current_time(char *time_buf, int buf_size) {
        time_t now = time(NULL);
        struct tm *t = localtime(&now);
        strftime(time_buf, buf_size, "%Y-%m-%d %H:%M:%S", t);
    }
    
    // 核心业务接口:处理手机测试结果
    DLL_EXPORT void handle_test_result(const char *phone_sn, const char *photo_path, TestResult *result) {
        // 初始化结果结构体
        memset(result, 0, sizeof(TestResult));
        
        // 填充结果数据
        result->code = 0;
        strcpy(result->msg, "处理成功");
        strcpy(result->phone_sn, phone_sn);
        strcpy(result->photo_path, photo_path);
        get_current_time(result->handle_time, sizeof(result->handle_time));
        
        printf("正在处理SN号:%s 的测试照片:%s\n", phone_sn, photo_path);
    }
    
    // 核心业务接口:获取版本号
    DLL_EXPORT const char *get_test_version() {
        return "v1.0.0 (C/C++ DLL)";
    }
    
  • 编译为.dll(使用MinGW或MSVC,以MinGW为例):

    # MinGW编译命令:生成business_core.dll
    gcc -shared -o business_core.dll business_core.c -Wall
    

    编译完成后,得到business_core.dll动态库。

步骤2:Python主程序调用.dll动态库

主程序main.py(固定逻辑,打包为EXE):

import ctypes
import os
import sys

# 定义与C结构体对应的Python类(通过ctypes映射)
class TestResult(ctypes.Structure):
    _fields_ = [
        ("code", ctypes.c_int),
        ("msg", ctypes.c_char * 128),
        ("phone_sn", ctypes.c_char * 64),
        ("photo_path", ctypes.c_char * 256),
        ("handle_time", ctypes.c_char * 32)
    ]

def load_c_dll(dll_name="business_core.dll"):
    """动态加载C/C++ DLL动态库"""
    # 确保DLL在EXE运行目录
    exe_dir = os.path.dirname(sys.executable) if hasattr(sys, 'frozen') else os.getcwd()
    dll_path = os.path.join(exe_dir, dll_name)
    
    if not os.path.exists(dll_path):
        raise Exception(f"未找到动态库 {dll_path},请将其放置在EXE同目录下")
    
    try:
        # 加载DLL
        dll = ctypes.WinDLL(dll_path)
        return dll
    except Exception as e:
        raise Exception(f"加载动态库失败:{str(e)}")

if __name__ == "__main__":
    try:
        # 1. 加载C/C++ DLL动态库
        dll = load_c_dll()
        
        # 2. 配置DLL接口的参数和返回值类型
        # 配置get_test_version接口
        dll.get_test_version.restype = ctypes.c_char_p
        
        # 配置handle_test_result接口
        dll.handle_test_result.argtypes = [
            ctypes.c_char_p,  # phone_sn(C字符串)
            ctypes.c_char_p,  # photo_path(C字符串)
            ctypes.POINTER(TestResult)  # 结果结构体指针
        ]
        dll.handle_test_result.restype = None
        
        # 3. 调用DLL接口
        # 调用获取版本号
        version = dll.get_test_version().decode("utf-8")
        print(f"当前动态库版本:{version}")
        
        # 调用处理测试结果接口
        test_result = TestResult()
        phone_sn = b"SN123456789"
        photo_path = b"./test_photo.jpg"
        dll.handle_test_result(phone_sn, photo_path, ctypes.byref(test_result))
        
        # 解析结果并打印
        print("\n测试结果处理完成:")
        print(f"  状态码:{test_result.code}")
        print(f"  提示信息:{test_result.msg.decode('utf-8')}")
        print(f"  手机SN号:{test_result.phone_sn.decode('utf-8')}")
        print(f"  照片路径:{test_result.photo_path.decode('utf-8')}")
        print(f"  处理时间:{test_result.handle_time.decode('utf-8')}")
        
    except Exception as e:
        print(f"程序运行失败:{str(e)}")
    input("按回车键退出...")
步骤3:打包与更新
  1. 用pyinstaller打包main.py为EXE:
    pyinstaller -F main.py
    
  2. 将business_core.dll复制到EXE同目录下,运行EXE即可正常调用C/C++动态库逻辑;
  3. 后续更新:修改business_core.c代码,重新编译为business_core.dll,替换旧文件即可,无需重新打包Python EXE。

方案优势与局限

  • 优势:高性能(C/C++编译执行)、源码完全隐藏、支持跨语言调用(与C++项目无缝衔接)、更新灵活;
  • 局限:需要掌握C/C++开发和动态库编译技巧,调试难度较高,跨平台需分别编译.dll和.so。

四、核心总结与方案选型建议

三种方案核心对比

方案动态库类型优点缺点适用场景
方案1.py模块零编译、易上手、快速迭代源码暴露、性能一般内部测试、快速迭代、无源码保密需求
方案2.pyd动态库源码隐藏、性能提升、调用兼容需Cython编译、跨平台稍差有源码保密需求、核心逻辑为Python编写
方案3.dll/.so动态库高性能、源码安全、跨语言需C/C++开发、编译复杂高性能需求、与C++项目对接、严格源码保密

核心要点(实现「无需更新EXE」的关键)

  1. 主程序(EXE)仅保留固定的加载/调用逻辑,不包含可变的核心业务逻辑;
  2. 可变逻辑抽离到独立的动态模块/动态库中,与EXE分离存放;
  3. 主程序通过「动态加载」方式调用模块/动态库,不进行静态打包;
  4. 后续更新仅替换独立的动态模块/动态库,无需改动主程序EXE。

选型建议

  1. 若你是Python开发者,无C/C++基础,优先选择方案1(快速落地)或方案2(需要保密时);
  2. 若你有C/C++基础,或需要高性能、跨语言对接,优先选择方案3(与C++调用动态库逻辑一致);
  3. 无论哪种方案,核心原则是「分离固定逻辑和可变逻辑」,这是实现「无需更新EXE」的根本。
python调用c++动态库 python调用动态库 阅读详情

相关推荐

python调用c++动态库的简单实现

python调用c++动态库的简单实现vs创建过程python调用 主要参考博客:https://blog.youkuaiyun.com/weixin_38285131/article/details/8128833 vs创建过程 新建一个vs项目之后选择包含dll(项目名for_dll) 在头文件中添加pycall.h,代码如下: //pycall.h class Mymath{ int sum(int,...

qq_37005499的博客 3131

chatgpt赋能python:Python动态库生成和调用方法

动态库是一种在运行时加载的库文件,与静态库相对。动态库可以支持多个应用程序同时共享一个库文件的代码,从而节省内存空间。在 Python 中,动态库通常是编写用 C 或 C++ 编写的代码并将其编译为共享库文件。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡。

yakuchrisfor的博客 758

python调用C/C++动态库

文章目录1. 背景知识1.1 动态链接库1.2 `extern &quot;C&quot;`作用1.3 动态链接库加载方式1.3.1 隐式链接1.3.2 显式链接2. python操作动态库2.1 加载动态库2.2 指定函数命名2.3 参数类型2.3.1 值类型2.3.2 指针类型2.3.3 引用类型2.3.4 结构体类型3.总结 本文以windows环境下的.dll动态链接库为背景展开,有关linux下的.so动...

sunyake001的博客 7523

Python调用C/C++动态链接库

Python调用C库的方法

牧羊女 6404

C动态库的生成与在Python和QT中的调用方法

动态库文件在程序开发中运用很常见,但C和C++代码生成动态库文件,以及在使用时均存在一些差异,本文对两者的差异进行了讲解,并通过具体的实例加以说明。实例均在Windows系统下进行,Linux系统下的实现一样。DLL动态库方便程序模块化开发,但是在进行跨语言调用时,最好只在DLL中封装相应的实现函数,而不要跨语言调用类的实现,避免一些不可预测的问题。

琳琳简单点的博客 1642

linux下python调用C++动态库以及库函数

C++:首先C++需要编译成动态共享库C++代码(cpptest.cpp)如下------#include&lt;iostream&gt;using namespace std;extern "C"{//在extern “C”中的函数才能被外部调用int test(){    cout&lt;&lt;"cpp文件已经被调用"&lt;&lt;endl; return 0; }}终端下编译命令:g++...

caobin0825的博客 3439

python3调用cpp的方法——python调用so

python中使用ctypes模块可以在python中直接调用C/C++。 首先要将C/C++编译成动态库(.so),之后python中调用即可 特别注意在调用C++函数需要在函数声明时,加入前缀“ extern “C” ”,这是由于C++支持函数重载功能,在编译时会更改函数名。在函数声明时,前缀extern "C"则确保按C的方式编译。 值得注意的是,一定要有函数输入输出类型的声明,int型不用...

springlustre的专栏 3万+

【不同编程语言之间动态库调用方法】

不同编程语言之间动态库调用方法详解

带土的博客 1065

Python调用c/c++动态库(一)

因为工作需求,最近要使用python在linux环境下调用c/c++的动态库,执行动态库中的函数。这种没接触过的内容,自然首先开启百度谷歌大法。经过一番搜索,尝试使用python的ctypes模块。 一、初识 首先自然是查询文档了。附文档链接:https://docs.python.org/zh-cn/2.7/library/ctypes.html python2.7文档描述:“cty...

giveaname的专栏 2万+

Python调用动态链接库(DLL)

上述Python代码中,使用ctypes.CDLL方法加载sum.dll文件,并指定其路径。动态链接库(Dynamic Link Libraries,简称DLL)是一种被多个程序共享的库文件,可以被用于将程序分解为小模块,减少内存占用,加快程序运行速度。但需要注意的是,在使用ctypes库时,需要确保本机的硬件和操作系统与目标DLL文件的硬件和操作系统匹配。编译上述代码并生成dll文件,例如生成名为sum.dll的文件。最后,调用sum_dll.sum(1, 2)可以得到1和2的和,输出结果为3。

2301_78484069的博客 4663

Python 与 C/C++ 交互:通过 Cython 调用 C/C++ 动态库详解

Cython是一种将Python代码转换为C代码并编译为Python扩展模块的工具,主要用于加速Python代码、调用C/C++函数库和创建高效扩展模块。文章介绍了Cython的基本概念、与其他工具的比较,以及环境准备步骤。详细讲解了如何创建C/C++动态库,并通过Cython进行包装调用,包括普通函数和C++类成员函数的调用方法。此外,还介绍了异常处理、STL容器支持和回调函数等高级用法。Cython适用于需要高性能计算、调用复杂C++类库或创建优化Python扩展的场景,是Python与C/C++交互的

数据知道的博客 5695

Python调用C++动态库

Python在使用ctypes调用C、C++动态库的场景

TheMARKZERO的博客 2851

C# 与 TensorFlow.NET:深度神经网络构建与优化的终极指南

是一个由开源社区维护的 C# 库,它将 TensorFlow 框架的强大功能带到了 C# 开发者的手中。TensorFlow 本身是 Google 开发的一个机器学习框架,广泛应用于深度学习、强化学习等领域。通过 TensorFlow.NET,C# 开发者无需切换语言环境,可以直接在 C# 中构建、训练和优化深度神经网络模型。首先,我们需要定义一个神经网络。该网络将包含输入层、隐藏层和输出层。// 输入张量(XOR 输入,2 个特征)// 输出张量(标签,1 个输出)// 定义第一个隐藏层。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1457

Python脚本调用C++动态库,C++调用Python脚本实操

注:虽然按照上述步骤操作了,但是很多时候运行脚本会报“找不到XXX模块的错”,这个时候就需要注意你当前调用的dll是否依赖了别的库,如果有需要把依赖的库一起拷到同一文件夹。把生成的动态库和脚本放在同一文件夹,然后执行脚本,就可以调用C++动态库里的函数了。直接引入python.h文件肯定会报错的,需要设置相关属性,打开工程属性,做如下设置。还是使用之前的脚本,内容如下,命令robotFlow.py。的错,解决方法是在object.h文件下添加如下代码。然后执行程序,整个流程就结束了。

wu_xiang_chao的博客 2399

【实战指南】基于YOLOv11的肺结节检测系统开发与优化(LUNA2016数据集)

本文提供了基于YOLOv11模型和LUNA2016数据集开发肺结节检测系统的完整实战指南。详细介绍了从环境搭建、数据预处理、模型训练与优化,到构建Web应用系统的全流程,旨在帮助开发者快速掌握医疗影像AI项目的核心开发技能。

weixin_29031057的博客 141

广告推荐算法 - 学习笔记(持续更新中)

本篇博客,是我用来记录学习广告推荐算法的一些笔记和总结。王喆:"深度"学习计算广告计算广告系统的核心目标是通过数据、算法和技术,在合适的场景下,将最相关的广告精准推送给目标用户,同时实现广告主媒体平台和用户之间的多方利益最大化。广告主:需求方核心目标:通过精准投放广告,最大化转化(如点击、购买)并控制成本,提升投资回报率(ROI)。关键行为:广告创建,定向设置,预算与出价策略,效果监控媒体平台:供给方核心目标:最大化广告收入,同时保持用户体验以避免用户流失。

qq_39748832的博客 2201

python调用c++动态库.so和静态库.a

python调用c++动态库.so和静态库.a

wujiahui3045的博客 6466

天龙八部源码深度解析:从宠物系统到副本机制(C++游戏开发实战)

本文深度解析《天龙八部》源码架构,重点剖析宠物系统状态机实现与副本动态加载机制等核心模块。通过C++代码示例展示宠物AI状态迁移逻辑和副本场景管理技术,为现代游戏开发提供兼容性改造方案与设计启示。适合游戏开发者学习经典MMORPG的工程化实现路径。

weixin_29011239的博客 389

python调用c++动态库(1)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

weixin_42096202的博客 925

fins协议握手信号服务器响应,欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等...

前言 – Fins欧姆龙这个协议网上极少有相关的模拟器、Tcp的这一块倒是有但是Udp的基本都是不可用1、 Fins协议结构也很简单 协议分为两种 一种tcp一种udp2、 Tcp比Udp的报文会多一层tcp的head头部3、 Udp回应报文在Wireshark中是解析不到(因为他按照UDP的格式去解那指定是解不到)好长时间没有更新过博客了、也比较懒= = 。一、Read(TCP)发包那么这个就很...

weixin_32491317的博客 4442

DeepSeek 框架和技术栈分析

DeepSeek 诞生于对更高效、更强大的深度学习计算和模型训练的追求。随着深度学习模型的规模不断增大,如大型语言模型(LLMs)和复杂的视觉模型,传统的框架在处理这些大规模模型时面临着性能瓶颈和资源利用效率低下的问题。DeepSeek 旨在解决这些问题,通过优化框架设计和采用先进的技术栈,实现更高效的模型训练和推理,同时降低计算成本。

yournameplease的专栏 1512

python调用c++动态库 类_使用ctypes在Python中调用C++动态库

使用ctypes在Python中调用C++动态库入门操作使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明:#include using namespace std;extern "C" {void greet() {cout ...

weixin_39635130的博客 769

Windows 10 本地硬盘变成了可弹出磁盘

今天新装了系统, 电脑是一个SSD+HHD, 没想到装好之后右下角显示可安全删除设备, 两个硬盘在那里. 这还得了. 查了一下午, 大致知道了是什么问题. Standard SATA AHCI controller使用高性能的硬盘模式就会把硬盘看作是一个可热插拔的存储器, 所以自然就会显示可弹出. 如果你的BIOS支持关闭HotSwap或者HotPlug, 那么直接关闭就可以了. 或者你直接在BIOS里把磁盘模式改为IDE, 不过这样就发挥不好你SSD的高性能了. 还有一种解决方法, 就是手动让系统把这两个

落日之城 4万+

python中调用C++写的动态库

一、环境:Windows XP + Python3.2 1. dll对应的源文件(m.cpp): #include extern "C" { _declspec(dllexport) int add(int a, int b) { return a+b; } _declspec(dllexport) void print_sum(unsigned long ulNum)

JoeBlackZQQ的专栏 1万+

【车载以太网测试从入门到精通】系列文章目录汇总

物理层测试、数据链路层测试、以太网交换机测试、网络层测试、传输层测试、以太网TCP/IP协议自动化测试、以太网网络管理测试、以太网网络管理自动化测试、鲁棒性测试、SOME/IP测试、SOMEI/IP服务接口自动化测试、DoIP诊断测试、DoIP诊断自动化测试、DoIP BootLoader刷写、以太网网关路由测试、以太网网关路由自动化测试、AVB测试。

测试领域技术分享 3163

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python调用c++动态库如何释放_使用ctypes在Python中调用C++动态库

使用ctypes在Python中调用C++动态库入门操作使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明:#include using namespace std;extern "C" {void greet() {cout << "hello python" << endl;}}将上述的C+...

weixin_39969953的博客 1044

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: python 调用C++动态库还会存在GIL问题吗
下一篇: windows调用C++动态库BOOL未定义
越甲八千
博客等级 码龄11年 2959粉丝 553原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值