• C++代码转C#代码,制作DLL,以供python调用


    之前上家公司一位C++很厉害的同事,用C++给我做了一个27算法的exe界面程序,由于工作需要我想把这个程序改成C#的形式, 然后用C#生成dll,供python调用,下面是方法。

    知识点汇总:1.python调用c++ 生成的dll和调用C#生成的dll 方法不一样的。
    python调用C#生成的dll 要用到clr库,而python调用c++生成的dll要用到ctypes
    本文重点记录了python调用C#生成的dll

    同事给的c++源代码如下:

    include "stdio.h"
    #include 
    #include 
    
    
    using namespace std;
    
     
    int Pepskey(int xx1, int xx2, int factor, int offset);
     
    int main( void )
    {
    int xx1 = 0;
    int xx2 = 0;
    int factor = 0;
    int offset = 0;
    int iRes  = 0;
    
    cout<<"Please input:"<<endl;
    cout<<"xx1:";
    cin>>hex>>xx1;
    cout<<"xx2:";
    cin>>hex>>xx2;
    cout<<"factor:";
    cin>>hex>>factor;
    cout<<"offset:";
    cin>>hex>>offset;
    
    iRes = Pepskey(xx1, xx2, factor, offset);
    iRes = iRes & 0xffff;
    printf("\nVal = %04X\n", iRes);
    
    cin>>xx1;
    
    return 0;
    }
    
    
    int Pepskey(int xx1, int xx2, int factor, int offset)  
    {  
        return (xx1*656+xx2)*factor + offset*6+100;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    经过修改后的C#代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace third_dll
    {
    
        public class Program
        {
    
    
            int iRes = 0;
    
    
    
            public int Pepskey(int xx1, int xx2, int factor, int offset)
            {
                return (xx1 * 656 + xx2) * factor + offset*6+100;
            }
    
    
            /*
    
            void Main(string[] args)
            {
    
                int xx1 = 0x5123;
                int xx2 = 0x6456;
                int factor = 0x7456;
                int offset = 0x8321;
    
                iRes = Pepskey(xx1, xx2, factor, offset);
    
    
                iRes = iRes & 0xffff;
    
                Console.WriteLine("--------------");
    
    
                Console.WriteLine("\nVal = %04X\n", iRes);
    
               // Console.ReadKey();
    
            }*/
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    用C#代码生成的dll 名字为“third_dll.dll”,然后将此dll放到和.py同一路径下。

    然后用python进行调用时的python代码为:

    import clr
    import json
    
    
    
    
    
    #clr.FindAssembly(path1)
    
    client=clr.AddReference('third_dll')
    
    print(client)
    
    from third_dll import *
    
    the=Program()#实例化
    
    xx1=0x1122
    xx2=0x2233
    factor=0x4455
    offset=0x6677
    
    k1 =the.Pepskey(xx1, xx2, factor, offset)
    
    print(k1)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    以上主要程序讲解完毕,实际制作当中踩了坑,
    坑1:crl库的安装,一定要安装和python对应的版本,例如我的python版本未3.9.7-32位,所以我下载的crl库要为“pythonnet-2.5.2-cp39-cp39-win32.whl”
    坑2:要用C#制作dll时,创建项目时一定要选择这个,(之所以花费了很长时间,其原因就这个选择错了)
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    openvino安装踩坑笔记
    嵌入式开发学习之STM32F407串口(USART)收发数据(三)
    华南技术栈CNN+Bilstm+Attention
    Python教程:with语句的用法
    # Kafka_深入探秘者(1):初识 kafka
    苹果急了,Type-C将一统天下,欧盟法案有望今年实现
    在Linux环境下从源码构建并安装GCC
    Redis Lua沙盒绕过命令执行(CVE-2022-0543)
    SMBMS超市管理系统(三:注销功能实现,登录功能优化)
    【计算机网络】TCP协议与UDP协议的区别
  • 原文地址:https://blog.csdn.net/weixin_44435894/article/details/126560925