java通过python调用C#dll文件,完美适应win和linux系统

项目需要java调用C#dll动态库文件,从来没开发过C#。先研究了JNA和JNI,这都需要在C#上通过C++再次封装,无法满足项目要求。

又找了CLE 公共语言扩展,开始没有细看网站说明,直接下载jar包就开发了。正在欣喜这个非常满足要求时,才发现目前java调C#不支持linux系统,唉!又是无奈的尝试。

最后还是考虑通过python调用C#,虽然不专业,多少也用过python。python中有个pythonnet模块有clr,非常好用,win和linux系统都完美支持。linux下安装pythonnet需要注意依赖的模块都要安装好还有就是mono环境也要安装好。

写的比较乱。win下比较好安装,只贴下linux系统安装步骤吧:

C#运行环境
net环境安装,可离线安装,注意依赖文件
[root@localhost ~]# sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
[root@localhost ~]# sudo yum update
[root@localhost ~]# sudo yum install dotnet-sdk-2.2
------安装mono
[root@localhost ~]# rpm --import "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
[root@localhost ~]# su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'
[root@localhost ~]# sudo yum install mono-devel
[root@localhost ~]# sudo yum install mono-complete
[root@localhost ~]# sudo yum install msbuild  //非常重要
[root@localhost ~]# sudo yum install clang     //非常重要
[root@localhost ~]# sudo yum install epel-release //部分机器需要安装

----安装pythonnet2.4.0.zip,这是最新版的,尝试其他版本都没有成功。python环境安装就不贴了,网上一大把
[root@localhost home]# unzip pythonnet-2.4.0.zip 
[root@localhost home]# cd pythonnet-2.4.0-rc1/
[root@localhost pythonnet-2.4.0-rc1]# python setup.py install

java代码:

public static void main(String[] args) {
        /**
         * java通过python调用C#dll库
         */
        String line = "";
        String reStr = "";
        Map<Integer, Object> map = new HashMap<>();
        String sKey ="22222222222222333333"; 
        String[] ars = new String[] {"python", "/home/jymx/Csharp/loadCsharp.py",sKey,"Demo.dll"};
        try {
            Process pr = Runtime.getRuntime().exec(ars);
            pr.waitFor();
            InputStreamReader ir = new InputStreamReader(pr.getInputStream(),"utf-8");
            BufferedReader in = new BufferedReader(ir);
            while ((line = in.readLine()) != null) {
                reStr += line;
            }
            System.out.println(reStr);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

loadCsharp.py 代码:

import clr  
import sys
import system
import os

sKey = sys.argv[1]
pgName =sys.argv[2]

sys.path.append(r"/home/jymx/Csharp")

# 加载c#dll文件
name =pgName[:-4]
clr.AddReference(name)

# 导入C#命名空间
from Jymx import *
#实例化C#类
qd = QueryJymx()
str = qd.queryData(sKey)
print(str)

---------------

py文件要和dll文件放在同一目录。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值