python转dll

最近有个新项目,客户需求将python脚本转为dll文件,当初听到这个需求我也是蒙圈的,毕竟我工作是干java的,对这个python啊c++啊都很久没接触过了。参考CSDN站大神写的帖子成功了,手把手教你将Python程序打包为DLL,在此非常感谢这位仁兄。但他写的年代有些久远了,不是特别适合2024年这个时间段小白的我,我用了三天的时间和寻求了一些同事的帮助和踩了很多坑,所以,我在此在他思路的基础上结合当前时点的软件版本进行新的记录,供大家参考。

1.安装python环境,因客户需求用3.6.5版本,直接官网下载安装,一路默认确定安装就行,非常无脑。注意目前电脑都应该是x64位的系统了,所以大家都安装x64的,千万别搞错了。

python官网

安装好之后,cmd上确认下

2.安装cython

这个安装就很简单了,在cmd直接执行命令

easy_install -U cython

等待它安装完成,在cmd 输入pip list 确认下

好了,这个时候我们就可以操作python文件了,据了解python文件是以.py结尾的文件,我们需要将.py文件先转为.pyx文件再进行下去(这个过程我还没弄,后续补充)。

那就假设我们手里就有了.pyx文件,直接从这部开始。

新建一个run.pyx文件,直接用记事本编辑,就是这么简单粗暴

cdef public int str_add(const char* str1,const char* str2):
  return int(str1) + int(str2)

 然后在此文件的所在目录直接cmd,输入命令

cython run.pyx

就会得到.c和.h文件,如下图

想必到这大家应该都不会有啥问题,那咱们深吸一口气继续。

此时我们需要安装一个工具,这个工具完全免费,它的名字叫做 visual studio community,这玩意我是第一次用,官网下载,visual studio community官网首页,也是一路无脑安装,我用的是2022版本,

上面两个红框里的内容都要勾上,上图是网图转过来的,你们必须两个都选哈,否则失败了,和我没关系。安装时间有些久,大家稍安勿躁。

安好之后,我们就可以一步一步,都有点耐心哈,我都会截图下来,跟住了。

 点击下一步,

名称位置啥的都挺随意,点击创建。

一进来,它长这样,然后我们开始表演。

首先将下图中,三个红框里的文件都删了。

之后,右键项目点击属性如下图

 上图,四个红框的内容都必须非常注意

1.配置(C):Release

2.平台(P):x64

3.可执行文件目录:你自己的python安装目录下的include文件夹,不知道python安装目录,没关系我黄风大圣来助你,cmd上如下执行

 4.库目录:你自己的python安装目录下的libs文件夹(注意不是lib文件夹)

然后将下面代码,替换掉dllmain.cpp中的内容

#include <Python.h>
#include <Windows.h>
#include "run.h"
extern "C"
{
    __declspec(dllexport) int __stdcall _str_add(const char* a, const char* b)
    {
        return str_add(a, b);
    }
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        Py_Initialize();
        PyImport_AppendInittab("run", PyInit_run);
        break;
    case DLL_PROCESS_DETACH:
        Py_Finalize();
        break;
    }
    return TRUE;
}

咔咔咔,一堆报错,不要慌,挨个解决。

注意红框内容。都虚点心嗷,我不啰嗦你们直接照着做。

 

这张图我多说一句,这个比较细节,这个就只手填“python36.lib”,不需要带任何路径,那你会问了这个.lib文件是哪来的了,那我告诉你,是刚才上面配置过的库目录的地址下的包,根据python版本不同,名字也不同,没找到的,转转自己脑子嗷。

 以上做完之后,你会发现,报错减少了,但还是有。

你看报的run.h眼熟不,对了,就是咱们一开始就生好的那个.c和.h文件中的.h文件,这时候,我们需要把.c和.h文件所在的目录配到如下的地方。

并且把.c和.h文件,粘贴到头文件里。

之后,再看,爽了吧各位。一点错没有。

然后右键项目,点重新生成。

这就成功了,去项目目录下找到.dll文件。

接下来我们需要验证下,生成的这个dll文件是否好用。

我们新打开一个visual Studio 2022

啥也不用配置,把ConsoleApplication1.cpp文件内容替换成下面的,.dll名称根据自己的改哈,抄作业别抄名,狗头。

#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
    // 调用dll测试
    typedef int(*pAdd)(const char* a, const char* b);
    HINSTANCE hDLL = LoadLibrary(L"Dll1.dll");
    cout << "hDLL:" << hDLL << endl;
    if (hDLL)
    {
        // 获取DLL中需要调用的函数的地址
        pAdd pFun = (pAdd)GetProcAddress(hDLL, "_str_add");
        cout << "pFun:" << pFun << endl;
        const char* stra = "50";
        const char* strb = "51";
        if (pFun)
        {
            int i = pFun(stra, strb);
            cout << "i = " << i << endl;
        }
    }
    else {

    }
    system("pause");
    return 0;
}

将刚才生的.dll文件粘到cpp同层。

并且同时将此文件放入C:\Windows\System32路径下,这个就是为什么我之前一直不好使,这段话价值千金。

右键项目,点击重新生成

点击一下按钮

成功了,完结撒花。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值