C#混合 Java 开发 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
unt
V2EX    程序员

C#混合 Java 开发

  •  
  •   unt 2023-08-10 08:57:54 +08:00 2999 次点击
    这是一个创建于 795 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请问 C#能调用 jar 包吗,互相调用的话会影响性能吗,影响有多少。
    15 条回复    2023-08-10 12:40:32 +08:00
    tairan2006
        1
    tairan2006  
       2023-08-10 09:00:02 +08:00
    你不能改成 API 调用么
    lisxour
        2
    lisxour  
       2023-08-10 09:05:37 +08:00
    用 ikvm 可以,具体兼容性、性能怎么样不太清楚
    258
        3
    258  
       2023-08-10 09:06:41 +08:00
    感觉不可以,两个虚拟机
    zjsxwc
        4
    zjsxwc  
       2023-08-10 09:11:14 +08:00
    C#能调用 jar 包吗?再开个 jvm 虚拟机,然后通过网络等方式调用 jar 包的 API 。
    互相调用的话会影响性能?必然是影响性能的。
    影响有多少?取决于你代码。
    luzemin
        5
    luzemin  
       2023-08-10 09:14:36 +08:00
    CS 领域的终极解决方案是:加一层
    a33291
        6
    a33291  
       2023-08-10 09:17:14 +08:00
    ikvm 是一个选择,但是好像对 java 版本有要求,而且原作者好像不维护了,现在有人在维护但是不够活跃.
    可以考虑改为 api 形式调用,直接内嵌 jar 的话应该只有 ikvm 可以尝试一下

    当然,比如.net 可以用 c++直接内嵌一个 runtime 然后在 c++一侧调用 C#的 api,不清楚能不能 java 也这么干
    timnottom
        7
    timnottom  
       2023-08-10 09:29:24 +08:00
    我也在考虑这个问题,如果以后 app 不让联网,就只能开发桌面端的软件了,但是要兼容现有的一些东西,就得生成一个 jar,然后让 c#调用
    GiantHard
        8
    GiantHard  
       2023-08-10 09:37:10 +08:00
    感觉你在找 FFI ,对于 Java 来说就是 JNI ,对于 C# 来说,需要通过 NativeAOT, P/Invoke ,别说混合 Java 了,混合任意支持 FFI 的技术都可以。通过这种方式互相调用肯定有影响的,主要消耗应该都在数据交换上面,建议参考文档推荐的方式编写代码、设计程序。

    https://en.wikipedia.org/wiki/Java_Native_Interface
    https://github.com/dotnet/runtimelab/tree/feature/NativeAOT/samples/NativeLibrary
    https://learn.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke
    ljsh093
        9
    ljsh093  
       2023-08-10 09:39:43 +08:00
    @timnottom #7 内网谁管得到你,都有 jar 了跑起来 api 调啊
    smirkcat
        10
    smirkcat  
       2023-08-10 10:03:44 +08:00
    为什么这样用??你可以调用命令行模式调用,一般都是调用库才用跨语言调用,比如我用过 java 调用 c++ ,golang 和 nodejs 调用 c++,但是从来没有说 java 调用 go nodejs , 即使调用也是命令行形式,比如我用 php 调用 nodejs 生成离线图表,你理解你的需求是什么,才能对症下药
    timnottom
        11
    timnottom  
       2023-08-10 10:22:44 +08:00
    @ljsh093 #9 不是内网,现在 app 要备案啊,以后如果不让上网,只能转阵 windows 平台
    dreamwy1990
        12
    dreamwy1990  
       2023-08-10 10:53:26 +08:00
    之前整过,我记得 vsstuido 里有个插件,c#能直接调用 jar 包
    roundgis
        13
    roundgis  
       2023-08-10 11:20:47 +08:00
    如果是 android ,可以生成 binding lib 再用

    https://learn.microsoft.com/en-us/xamarin/android/platform/binding-java-library/

    如果是一般的 jar 可以用 graalvm 生成.so 再用

    或者用 ipc 通信
    flyqie
        14
    flyqie  
       2023-08-10 11:31:33 +08:00 via Android
    rpc ipc

    你自己选
    hez2010
        15
    hez2010  
       2023-08-10 12:40:32 +08:00 via Android
    如果你的 jar 是 target 到 Java8 的话可以直接通过 ikvm 来调用。
    使用方法也很简单,c# 项目里直接引用 jar 包就能直接用了。
    https://github.com/ikvmnet/ikvm
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1149 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:17 PVG 07:17 LAX 16:17 JFK 19:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86