精华内容
下载资源
问答
  • python调用dll

    2020-04-06 12:43:48
    1.整理python调用dll的方法 python调用dll的话 根据之前查到的资料看上去应该是很简单的 加载DLL from ctypes import * dll = CDLL(“add.dll”) print dll.Add(1, 102) —调用dll中的函数 CDLL(“add.dll”) 是调用...

    1.整理python调用dll的方法
    python调用dll的话 根据之前查到的资料看上去应该是很简单的

    加载DLL

    from ctypes import *
    dll = CDLL(“add.dll”)
    print dll.Add(1, 102) —调用dll中的函数

    CDLL(“add.dll”) 是调用符合cdecl调用约定函数的加载DLL方式

    2.vs生成简单的dll并使用python调用dll中的函数(函数参数分别为基本类型,指针,对象)

    2.1 创建32位python虚拟环境
    vs生成的dll为32位,而一般python都是64位,在prompt中切换成32位(set CONDA_FORCE_32BIT=1),再创建一个python虚拟环境,然后在pycharm中引入这个环境就可以了;

    2.2 32位的第三方库的安装
    激活虚拟环境后,再执行一次set CONDA_FORCE_32BIT=1,经测试直接用conda/pip install安装的还是64位的库,需要到pypi上下载32位的库的安装包然后安装,不然会报错;

    python调用dll中的函数:https://blog.csdn.net/weixin_38285131/article/details/81288338
    dll生成:https://blog.csdn.net/u013263891/article/details/83025639
    dll生成前需要定义一个宏#define DLLEXPORT extern “C” __declspec(dllexport),然后在每个需要在python中调用的函数的定义前把宏加上DLLEXPORT int sum(int a, int b)

    实战:
    1.python引入xxx.dll,并调用函数
    由于xxx.dll依赖其他dll,经测试需要将aaa.dll放在与python.exe同一个文件夹下(D:\Anaconda\envs\python32);在python下读取测试图片灰度图,并reshape成1维向量,使用in_img_temp=(ctypes.c_uint8*len(in_img))(*in_img)将numpy数组转化为ctypes数组(*in_img_temp获取ctypes数组值),传入dll.func(in_img_temp,out_img_temp)得到处理后的图片的一维向量;

    代码如下:

    n_img=cv2.imread('...\\test.bmp',0)
    
    dll=ctypes.CDLL('...\\test.dll')
    
    dll.funcSetImageSize(512,640)
    dll.funcSetOptimizationLevel(9)
    dll.funcInit()
    
    out_img=np.uint8(np.zeros((512*640)))
    in_img=in_img.reshape(512*640)
    out_img_temp=(ctypes.c_uint8*len(out_img))(*out_img)
    in_img_temp=(ctypes.c_uint8*len(in_img))(*in_img)
    dll.func(in_img_temp,out_img_temp)
    
    output=np.array([*out_img_temp]).reshape(512,640)
    cv2.imwrite('...\\test.jpg',output)
    
    展开全文
  • Python 调用 DLL

    千次阅读 2019-04-18 10:49:51
    Python 调用 DLL( ctypes库) 1、ctypes 库 ctypes 库用来调用 windows 的 dll / linux 的 so python 自带 ctypes 库,不需额外安装 2、调用 DLL 第一步:用 c/c++,创建一个 dll 第二步:把生成的...

    Python 调用 DLL


    一、C++ 编写 DLL

    1、.hpp 头文件

    // dll_test.hpp
    
    #ifdef DLL_TEST
    #define MY_API _declspec(ddllexport)    // 当头文件作为DLL工程编译时(会用到DLL工程中的 .cpp 文件),设为导出。
    #ELSE                                                                            
    #define MY_API _declspec(dllimport)    // 当DLL被其它工程调用时(不会用到DLL工程中的 .cpp 文件),设为导入。
    #endif 
    
    //需要被外界调用的类(父类)
    class MY_API my_class              
    {
    public:
    	// 类成员变量
    	int x;
    	// 类方法
    	void func(int x);	
    };
    
    // 函数,真正的函数名由编译器决定                                        
    int MY_API add(int x, int y);  
    
    // 函数,函数名不会被改变   
    extern "C" MY_API int  add(int x, int y);  
    

    2、.cpp 文件

    // dll_test.cpp
    
    #define DLL_TEST    // 定义宏,使编译DLL工程时为导出 (结合头文件看)
     
    #include <iostream>
    #include "dll_test.hpp"
    using namespace std;
    
    // 类方法实现 
    void MY_API my_class::func(int x)
    {
         cout <<  x << endl;
    } 
    
    // 函数实现
    int MY_API add(int x, int y)
    {
         return x+y;
    }
    

    二、Python 调用 DLL

    1、ctypes 库

    • ctypes 库用来调用 windows 的 dll / linux 的 so
    • python 自带 ctypes 库,不需额外安装

    2、调用 DLL

    • 第一步:用 c/c++,创建一个 dll
    • 第二步:把生成的 .dll 文件拷贝到 .py 文件的同级目录
    • 第三步:使用 ctypes 库调用 dll
    # 导入 ctypes 库
    from ctypes import *  
    
    # 加载 dll 文件为一个对象
    dll = CDLL("dll_test.dll")  
    
    # 调用 dll 中的函数,dll 要有add()函数
    res = dll.add(1, 2)  
    

    GOOD LUCK!


    展开全文
  • Python调用DLL

    2019-09-14 21:42:42
    C语言中的函数默认是__cdecl调用,C++中可用__stdcall来显示...用python调用dll时需要根据不同的调用约定而使用不同的函数。但是不管什么调用,最后都必须用extern “C”来防止名字粉碎。 dll源文件: #include...

    C语言中的函数默认是__cdecl调用,C++中可用__stdcall来显示声明调用,但也可以用extern “C”

    用python调用dll时需要根据不同的调用约定而使用不同的函数。但是不管什么调用,最后都必须用extern “C”来防止名字粉碎。

    dll源文件:

    #include <iostream>
    extern "C" _declspec(dllexport) int __stdcall stdAdd(int a, int b)
    {
    	std::cout << "This is __stdcall dll" << std::endl;
    	return a + b;
    }
    
    extern "C" _declspec(dllexport) int cdeAdd(int a, int b)
    {
    	std::cout << "This is __cdecl dll" << std::endl;
    	return a + b;
    }

    python代码:

    #!/usr/bin/python
    
    from ctypes import *
    dll = windll.LoadLibrary('D:/CodeFile/Monitor/Debug/CppDll.dll')
    print(dll.stdAdd(2, 4))
    print(dll.cdeAdd(2, 4))
    最后结果:



    由结果可知,cdeAdd访问出现异常。

    总结:如果dll是stdcall调用,则python中用windll加载,如果dll是cdecl调用,则python用cdll加载。

    注*以上是在python3.3中运行的



    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载于:https://my.oschina.net/meiqizhang/blog/524517

    展开全文
  • 我想从Python调用DLL中的函数。但我有个错误:"Attribute Error function not found"这是我的代码:import osimport ctypesos.chdir("C:\\Program Files\\Compact Automated Testing System V2.0")# Load DLL into ...

    我想从Python调用DLL中的函数。但我有个错误:"Attribute Error function not found"

    这是我的代码:import os

    import ctypes

    os.chdir("C:\\Program Files\\Compact Automated Testing System V2.0")

    # Load DLL into memory.

    CATSDll = ctypes.WinDLL ("CATS.dll")

    # Set up prototype and parameters for the desired function call.

    CATSDllApiProto = ctypes.WINFUNCTYPE (ctypes.c_uint8,ctypes.c_double)

    CATSDllApiParams = (1, "p1", 0), (1, "p2", 0),

    # Actually map the call (setDACValue) to a Python name.

    CATSDllApi = CATSDllApiProto (("setDACValue", CATSDll), CATSDllApiParams)

    # Set up the variables and call the Python name with them.

    p1 = ctypes.c_uint8 (1)

    p2 = ctypes.c_double (4)

    CATSDllApi(p1,p2)

    但DLL文档显示了一个以ChannelId&amp;DAC Voltage为输入的函数setDACValue。

    以上是基于StackOverflow提供的一段代码。

    我还尝试了使用cdll.LoadLibrary然后调用函数的简单方法,但这也会产生相同的错误。

    有人能告诉我怎么了吗?谢谢。

    完整回溯:Traceback (most recent call last):

    File "C:\Users\AEC_FULL\Softwares\eclipse\plugins\org.python.pydev_3.9.2.201502050007\pysrc\pydevd.py", line 2235, in

    globals = debugger.run(setup['file'], None, None)

    File "C:\Users\AEC_FULL\Softwares\eclipse\plugins\org.python.pydev_3.9.2.201502050007\pysrc\pydevd.py", line 1661, in run

    pydev_imports.execfile(file, globals, locals) # execute the script

    File "C:\Users\AEC_FULL\Saravanan\Workspace\CATS\CATS.py", line 18, in

    CATSDllApi = CATSDllApiProto (("setDACValue", CATSDll), CATSDllApiParams)

    AttributeError: function 'setDACValue' not found

    展开全文
  • Python调用dll

    2014-09-28 11:14:18
    pyhton语言简单、快捷,入门很快,应用方便。调用dll文件也是得心应手,非常便捷。文档提供了示例代码,以及调用dll的步骤分析
  • 1.python调用dll,必须客观根据dll原文件中声明的对应方式调用; 每个函数的入参和出参类型必须客观的根据原函数的入参和出参类型进行设置转化; 如果不清楚原函数出入参的类型,就不要谈python调用dll文件啦; ...
  • 最近要使用python调用C++编译生成的DLL动态链接库,因此学习...一、Python调用DLL里面的导出函数1.VS生成dll1.1 新建动态链接库项目1.2 在myTest.cpp中输入以下内容://myTest.cpp : 定义 DLL 应用程序的导出函数。...
  • 最近要使用python调用C++编译生成的DLL动态链接库,因此学习...一、Python调用DLL里面的导出函数1.VS生成dll1.1 新建动态链接库项目1.2 在myTest.cpp中输入以下内容://myTest.cpp : 定义 DLL 应用程序的导出函数。...
  • C语言中的函数默认是__cdecl调用,C++中可用__stdcall来显示声明调用,但也可以用extern “C”用python调用dll时需要根据不同的调用约定而使用不同的函数。但是不管什么调用,最后都必须用extern “C”来防止名字...
  • 【转载】python调用dll方法python调用dll方法来自http://blog.csdn.net/lf8289/article/details/2322550分类:python2008-04-2412:276833人阅读评论(6)收藏举报在python中调用dll文件中的接口比较简单,实例代码如下...
  • python源码# 调用ctpes 组件from ctypes import *if __name__ == '__main__':# 调用需要调用dlldll中的方法都可以使用了dll= CDLL("DemoDll.dll")# python中默认类型是int,可以直接调用 returnAddInt方法print...
  • 首先用visual studio写个dll。// TestDll.cpp : Defines the entry point for the DLL application.//#include "stdafx.h"#include using namespace std;#ifdef _MANAGED#pragma managed(push, off)#endif#ifdef __...
  • python 调用dll

    2014-07-11 12:04:53
    python调用dll文件中的接口比较简单,实例代码如下: 如我们有一个test.dll文件,内部定义如下: extern "C" { int __stdcall test( void* p, int len) {  return len; } } 在...
  • python中如何调用dll,并向dll接口传递byte码流呢,请看本文章的代码展示工作上需要用python调用dll解析码流输出到文件,如何调用dll很多博客都有描述,,请参考如下blog:如何调用请参考:WinDLL和CDLL的选择,请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,478
精华内容 991
关键字:

python调用dll

python 订阅