zoukankan      html  css  js  c++  java
  • python引用C++ DLL文件若干解释及示例

    python引用C++ DLL文件若干解释及示例

    首先说一下,python不支持C++的DLL,但是支持C的DLL;C++因为和C兼容可以编译为C的DLL,这是下面文章的背景与前提


    首先我这儿的示例使用VS2017编译的DLL,先讲过程,再解释

    第一步,新建DLL项目

    在这里插入图片描述

    确定之后我们可以看到默认的文件

    在这里插入图片描述

    这时候我们需要新建一个与Test.cpp对应的头文件
    在这里插入图片描述

    这是完成之后的代码结构
    在这里插入图片描述

    下面是Test.h文件的内容和Test.cpp文件的内容及相应解释

    // Test.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    #include "Test.h"
    
    bool Test1()
    {
    	return true;
    }
    
    bool Test2()
    {
    	return false;
    }
    

    首先我们需要引用Test.h,也就是我们刚刚建立的与之匹配的头文件

    Test1和Test2就是我们写的python需要调用的函数,因为python在调用DLL时除了int型其他的返回类型都需要指定,所以我用bool来展示

    //Test.h
    
    
    #pragma once
    extern "C" __declspec(dllexport) bool Test1();
    extern "C" __declspec(dllexport) bool Test2();
    

    这是我们建立的头文件

    第一行VS自动生成,不用管它,它的作用是保证头文件只被编译一次

    第二行和第三行就是我们要添加的代码,这两行就是我们定义的函数,有点像以前学C语言的时候老师说的定义在main函数后面的函数要在前面先写一次,记住这个形式就好了。我来讲讲前面的代表什么意思

    • extern “C”

    这个的意思是声明的函数可以被其他模块调用,并且编译为C文件

    • __declspec(dllexport)

    这是MS VC中专用的关键字,表示将函数、类等声明为导出函数,供其他程序调用

    这两个加起来添加到头文件里,声明的函数编译出来就可以被python调用了

    python调用方法也很简单

    from ctypes import *
    dll = CDLL("Test.dll")
    dll.Test1.restype = c_bool
    # restype是函数的返回类型,c_bool代表返回bool类型,这里的对应关系就自己查一下了
    # 除了restype还有argtypes,代表函数的参数类型
    print(dll.Test1())
    

    整体大致就是这样了,如果没成功可以给我留言看看,我也是个新手,最近因为一个项目才用到Python,如果有什么不对的请批评指正

    关于ctypes的部分,主要参考了这篇博文,感谢”无尽的数字眩晕症“

    https://www.cnblogs.com/night-ride-depart/p/4907613.html

  • 相关阅读:
    【制作】基于金沙滩51单片机的电子密码锁程序
    【制作】基于51单片机的蓝牙遥控小车方案
    【制作】基于金沙滩51单片机的贪吃蛇程序
    【单片机】滑稽AT89C52表情实现
    【错误解决】Android APK 方法数量限制
    【教程】C语言入门
    fastdfs分布式安装教程
    xposed绕过ssl校验新玩具
    最新get两款脱壳工具
    app逆向万能的md5加密hook破解入参方法(其他加密用通用方法原理差不多,小白推荐)
  • 原文地址:https://www.cnblogs.com/wujuncheng/p/13388957.html
Copyright © 2011-2022 走看看