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

  • 相关阅读:
    多个自定义覆盖物注册点击事件,点击某个覆盖物后获得它的坐标
    C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名
    如何添加EXEStealth 2.5x 壳
    PACS系统简易
    好用的后端模版
    E信通项目总结[转]
    平台型产品的设计思路[转]
    baidu思维脑图在线编辑器
    Web 前端攻防(2014版)-baidu ux前端研发部
    访谈标叔:给新人设计师的建议【转】
  • 原文地址:https://www.cnblogs.com/wujuncheng/p/13388957.html
Copyright © 2011-2022 走看看