精华内容
下载资源
问答
  • I must used a C++ dll using MFC and I would like to call it from python.This dll contains this header in the .h fileLONG CommOpen(BYTE port, LONG baud_rate);Then I see in the free software dllexp that...

    I must used a C++ dll using MFC and I would like to call it from python.

    This dll contains this header in the .h file

    LONG CommOpen(BYTE port, LONG baud_rate);

    Then I see in the free software dllexp that my function is called ?CommOpen@CFIPcmd@@QAEJEJ@Z in the binary file so no error is reported when I do in python

    import ctypes

    lib = ctypes.WinDLL('C:\Users\toto\FIProtocol.dll')

    prototype = WINFUNCTYPE(c_long, c_byte, c_long)

    testPt = ctypes.WINFUNCTYPE (prototype)

    testApi = testPt (("?CommOpen@CFIPcmd@@QAEJEJ@Z", lib))

    Until there it seems to work but then I would like to call the in Python the equivalent in C++ of

    Long l= CommOpen(5 ,115200);

    But I Didn't find know how to proceed.

    Any help would be really appreciated!!

    解决方案

    Given the information presented in the question, the solution is:

    import ctypes

    lib = ctypes.CDLL(r'C:\Users\toto\FIProtocol.dll')

    CommOpen = getattr(lib, "?CommOpen@CFIPcmd@@QAEJEJ@Z")

    CommOpen.argtypes = [c_byte, c_long]

    CommOpen.restype = c_long

    And now it is ready to call:

    l = CommOpen(5 ,115200)

    Some notes:

    Use CDLL rather than WinDLL because the function used the default cdecl calling convention.

    Use getattr to be able to specify the mangled name.

    It always pays to specify argtypes and restype explicitly.

    However, it transpires that you have a much greater problem. The above was written on the basis that your function is a non-member function. Which is a reasonable assumption given that ctypes requires functions to be either non-member, or static.

    However, when I put your managed function name into a demanger (for instance http://pear.warosu.org/c++filtjs/) it seems that the function is in fact:

    public: long __thiscall CFIPcmd::CommOpen(unsigned char,long)

    That is a member function of a C++ object. That cannot be accessed from ctypes. You'll need to create a plain C style wrapper, or find a different method of interop.

    展开全文
  • 原文地址http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer# This is the distutils script for creating a Python-based com dll # server using ctypes....# After you run this (from this directory) ...

    原文地址http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer# This is the distutils script for creating a Python-based com dll

    # server using ctypes.com. This script should be run like this:

    #

    # % python setup.py py2exe

    #

    # After you run this (from this directory) you will find two directories here:

    # "build" and "dist". The .dll file in dist is what you are looking for.

    ##############################################################################

    from distutils.core import setup

    import py2exe

    import sys

    class Target:

    def __init__(self, **kw):

    self.__dict__.update(kw)

    # for the version info resources (Properties -- Version)

    self.version = "0.0.1"

    self.company_name = "my company"

    self.copyright = "© 2006, my company"

    self.name = "my com server name"

    my_com_server_target = Target(

    description = "my com server",

    # use module name for ctypes.com dll server

    modules = ["dir.my_com_server"],

    # the following line embeds the typelib within the dll

    other_resources = [("TYPELIB", 1, open(r"dir\my_com_server.tlb", "rb").read())],

    # we only want the inproc (dll) server

    create_exe = False

    )

    setup(

    name="my_com_server",

    # the following two parameters embed support files within dll file

    options={"py2exe": {"bundle_files": 1, }},

    zipfile=None,

    version="0.0.1",

    description="my com server",

    # author, maintainer, contact go here:

    author="First Last",

    author_email="some_name@some_company.com",

    packages=["dir"],

    ctypes_com_server=[my_com_server_target]

    )

    展开全文
  • python打包DLL错误

    2019-04-15 18:02:02
    如果你是win10,用pyinstaller打包,然后打出来的包里面没有api-ms-win-*.dll,那恭喜你,可能踩了个坑 微软的描述: https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/ ...

    报126之类的错误,多半是因为DLL引用链里面缺了某些dll,而不一定是第一个DLL找不到

    如果你是win10,用pyinstaller打包,然后打出来的包里面没有api-ms-win-*.dll,那恭喜你,可能踩了个坑
    微软的描述:
    https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/
    github上的issue:
    https://github.com/pyinstaller/pyinstaller/issues/1566

    大约是说,win10里面,这些dll是magic words,不是真正存在的dll,import的时候会自动跳转到别的逻辑去。但是win10以下的系统又真的要import这些dll,所以你如果在win10上面打包,在win10上面跑的话,没有这些dll也是ok的。但是如果在win10以下的系统跑的时候,就需要这些dll了,pyinstaller给出的解决方案是:https://github.com/pyinstaller/pyinstaller/pull/2821/files

    1. 在win7下面打包
    2. 在你的终端用户电脑上装vs2015redist
    3. 在打包机上装win10SDK https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

    第一点多半是OK的,但是比较强硬
    第二点没试过,但是不符合开箱即用的要求
    第三点可能是比较好的解决方案

    事实上也有一个比较暴力的方案(也可能是第二点的某种黑实践),你全局搜索一下,你的电脑上装的很多软件都踩过这个坑,所以都会自带一套这些dll文件,你在打包的时候复制进去就好了。但是可能不是彻底解决问题的方法。

    展开全文
  • 今天写了个Python小程序,打包exe后在我的电脑上运行一直提示缺少dll文件,我下载了2015vc库合集也没解决这个问题,后来从上网找到的资源,如果电脑缺少dll文件,可以下载此文件,也可到微软官网自行下载
  • 【解决】pyinstaller --clean --win-private-assemblies -F XXXX.py <p>--clean清除pyinstaller的缓存并移除之前建立的临时文件,  --win-私人组件把跟这个程序捆绑的共享的组件都改为私有的 ...
  • Python dll打包

    千次阅读 2012-02-08 15:24:50
    原文地址... # This is the distutils script for creating a Python-based com dll # server using ctypes.com. This script should be run like this: #
    
    原文地址http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer
    
    
    
    # This is the distutils script for creating a Python-based com dll
    # server using ctypes.com.  This script should be run like this:
    #
    #  % python setup.py py2exe
    #
    # After you run this (from this directory) you will find two directories here:
    # "build" and "dist".  The .dll file in dist is what you are looking for.
    ##############################################################################
    
    from distutils.core import setup
    import py2exe
    import sys
    
    class Target:
        def __init__(self, **kw):
            self.__dict__.update(kw)
            # for the version info resources (Properties -- Version)
            self.version = "0.0.1"
            self.company_name = "my company"
            self.copyright = "© 2006, my company"
            self.name = "my com server name"
    
    my_com_server_target = Target(
        description = "my com server",
        # use module name for ctypes.com dll server
        modules = ["dir.my_com_server"],
        # the following line embeds the typelib within the dll
        other_resources = [("TYPELIB", 1, open(r"dir\my_com_server.tlb", "rb").read())],
        # we only want the inproc (dll) server
        create_exe = False
        )
    
    setup(
        name="my_com_server",
        # the following two parameters embed support files within dll file
        options={"py2exe": {"bundle_files": 1, }},
        zipfile=None,
        version="0.0.1",
        description="my com server",
        # author, maintainer, contact go here:
        author="First Last",
        author_email="some_name@some_company.com",
        packages=["dir"],
        ctypes_com_server=[my_com_server_target]
        )


    展开全文
  • 如何将python程序打包DLL

    千次阅读 热门讨论 2020-12-12 16:43:45
    如何将python程序打包DLL前言Step1:用cython生成python脚本的.h和.c文件Step2:生成dll文件Step3:测试dll文件 前言 将python程序打包DLL文件,然后用C++调用生成的DLL文件,这是一种用C++调用python的方法,这...
  • Python打包exe文件方法汇总【4种】

    万次阅读 多人点赞 2018-10-21 22:15:11
    title: Python打包exe文件方法 copyright: true top: 0 date: 2018-08-11 21:08:21 tags: 打包 categories: Python进阶笔记 permalink: password: keywords: description: 使用py2exe,pyinstaller,cx_Freeze,...
  • 教你如何Python程序打包DLL Python数据类型和C数据类型似乎有一个\u201C一一对应\u201D关系,此外,因为Python(准确地说,CPython)本身是由C语言实现,因此,Python数据类型之间的函数操作必须有一个相应的与C语言的...
  • 手把手教你将Python程序打包DLL

    万次阅读 多人点赞 2019-05-30 18:44:44
    手把手教你将Python程序打包DLL Python的数据类型和C的数据类型貌似是有某种“一一对应”的关系的,此外,由于Python(确切的说是CPython)本身是由C语言实现的,故Python数据类型之间的函数运算也必然与C语言有...
  • 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”) 是调用...
  • 所幸有很三方软件py2exe,可以将python打包成exe程序,直接点击就可运行。一. 安装py2exehttp://www.py2exe.org/ 下载py2exe,运行python setup.py 安装。python 命令行下,运行import py2ex...
  • 使用python 检索PE文件(dLl,exe)里面的字符串信息?就是图中右边的字符串,怎么样通过python实现?如何用python读取dll文件属性的Copyright,Versionapi getfileversioninfo能调用出来,麻烦写成dll自己调. import...
  • http://blog.csdn.net/magictong/archive/2008/10/14/3075478.aspx貌似原文的网页服务器有问题,总是load不全,所以备个份:Python调用...使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下...
  • Python项目打包发布方法目前python打包工具有多个,目前比较好用的为pyinstaller,该工具可以支持在window和linux下使用。在windows下,大小为几十K的源文件打包成exe文件,可能为几十兆,原因是把程序所引用的库...
  • 标签:以下主要Python打包汇总,作为学习备份;一、使用python内部基础工具包Distutils打包程序1. 在打包之前需要做的就是配置好安装脚本,一般为setup.py文件;示例(setup.py):from distutils.core import setup...
  • 遇到的问题近期在打包python写的代码的时候,代码中还涉及了DLL的调用,在自己在pycharm中使用的时候可以写相对路径,绝对路径。这样运行毫无问题,但是在打包后就无法打开exe文件。# MvCamCtrldll = WinDLL("C:/...
  • python打包

    2019-08-23 14:56:44
    python打包有一个组织叫python packaging authority(pypa).还有一个python第三方仓库叫Python Package Index(Pypi) 与包有关的两种工具,一种是安装包的工具,另一种工具用于包的创建和分发 安装包的工具 pip安装...
  • 【 声明:版权所有,欢迎转载,请勿用于商业用途。...回到windows平台,用python调用dll程序,也是十分有必要的。用python调用dll不复杂,做好这几步就可以了, 1、创建一个dll工程 就按照vs2017的...
  • Python调用DLL中的函数

    千次阅读 2018-09-14 17:00:44
    最近研究了一下用Python调用dllPython果然很神奇,代码不多既实现了从窗口创建到调用dll中函数的功能,程序也不复杂,最后打包成exe可直接执行的程序,测试过程中先用Python3.5,但用PyInstaller打包后的程序在xp...
  • python环境也可执行文件尽量少,不要太乱程序体积尽量小如果需要更新的话重复类库不用更新采用方案如下:使用py2exe自动导入类库使用7-ZIP压缩libraryupx压缩dll等文件nsis生成安装文件采用md5验证的方式判别不用...
  • Python打包

    2021-05-19 11:06:00
    pyinstaller -F -w -i 'xxx.ico' xxx.py -F: 产生单个可执行文件 -w: 不显示控制台 -i: 添加图标 # 注意,-F -w -i都是可选项,最简单打包代码为pyinstaller xxx.py,默认情况下会生成exe及其依赖的dll 如:...
  • 下面小编就为大家带来一篇Python之py2exe打包工具详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧下载Python对应版本的py2exe,使用这个工具可以将自己的程序打包成exe文件。...
  • python打包成exe

    千次阅读 2018-10-28 16:18:08
    python打包成exe 前言 python打包成python有两种方式pyinstaller 和py2exe,但是py2exe由于老旧,并且兼容性不好,所以不被采用,这里使用pyinstaller 进行打包。 安装pyinstaller 使用pip安装 pip install ...
  • python写的程序,转成了exe文件,怎么进行反编译为用pyinstaller,很容易就能实现,步骤如下:下载pyinstaller包,(小编可以安装包发给你),把pyinstaller解压到任意路径后1.开始->运行->cmd->回车2.把路径改为...
  • python打包有很多方法,py2exe,pyinstaller等等(其实我也就知道这两种)。py2exe要自己写setup.py, 太麻烦。用了pyinstaller。  1.用命令行安装pyinstaller:(要在工程所在的环境里安装) pip inst...
  • 162015-10-26 17:21:37 +08:00我 evernote 中记录的一个情况,是 py2exe 会默认少打包一个 dll 文件,包进去就可以了,不一定适用你的情况。==================================================Thanks to this link...
  • Python打包工具比较

    千次阅读 2018-10-08 10:46:32
    Python打包工具比较 Solution Windows Linux OS X Python 3 License One-file mode Zipfile import Eggs pkg_resources support bbFreeze yes yes yes no MIT no yes yes yes py2exe yes no no yes MIT ...
  • python 可以调用C++的DLL 动态链接库,从而达到与c++语言交互的目的。 python调用C++编译生成的DLL动态链接库,我们需要借助ctypes库。 ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,209
精华内容 2,883
关键字:

python打包dll

python 订阅