`
k_lb
  • 浏览: 834005 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

java调用C#动态库

 
阅读更多

前言

借助于CLE,可以很容易在java中使用C#的动态库,这里通过一个简单的例子说明。使用CLE,需要预先安装http://www.srplab.com/Data/starcore_win32.2.0.3.exe.

下面是一段C#的代码,非常简单:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using star_csharp;

namespace testcs
{
public class Class1
{
public Class1(stringmsg,floatnum)
{
Console.WriteLine("Demo...");
Console.WriteLine(num);
}
public stringgetMessage(stringmsg)
{
return "hello "+msg;
}
}
}
代码包含一个构造函数,和一个getMessage函数,该函数输入为一个字符串,返回1个字符串。
把上面的代码编译成为动态库,使用下面的命令。
csc /reference:c:\srplab\libs\star_csharp.dll /target:library /platform:x86 testcs.cs

java调用C#生成的动态库,首先需要初始化CLE

使用下面的代码:

import com.srplab.www.starcore.*;
public class test{
public static void main(String[] args){
StarCoreFactory starcore=StarCoreFactory.GetFactory();
StarServiceClass Service=starcore._InitSimple("test","123",0,0);
StarSrvGroupClass SrvGroup = (StarSrvGroupClass)Service._Get("_ServiceGroup");

SrvGroup._ClearService();
starcore._ModuleExit();
}

}

调用C#


1. 使用_InitRaw初始化C#接口


SrvGroup._InitRaw("csharp",Service);

输入参数:第一个字符串为接口的名称,可以是”csharp”,”csharp4”,”csharp45”, 分别对应于.Net3.5, .Net4.0和.Net4.5。第二个参数为初始化时创建的服务对象。


2. 使用_LoadRawModule装载C#动态库


SrvGroup._LoadRawModule("csharp","testcs","testcs.dll",false);

输入参数:第一个是接口名称,第二个是程序集的名称,第三个是动态库的文件名,第四个参数为bool类型,输入false即可。


3. 使用_ImportRawContext导入C#动态库中的类


StarObjectClass Class1 = Service._ImportRawContext("csharp","testcs.Class1",true,"");

输入参数,第一个是接口名称,第二个是完整的类的名称,第三个参数设置为true,表示导入的是1个类。第四个参数保留,固定设置为””。


4. 使用_New函数分配1个类的实例


StarObjectClass inst = Class1._New("","","cle value",44);

输入参数:前两个分别为新对象的名称,以及初始化lua字符串,设置成为空即可。后面为构造函数的参数。


5. 使用_Call函数调用类的成员函数


String Result = (String)inst._Call("getMessage","java");

输入参数:第一个是要调用的函数名称,后面的参数是函数的参数。返回值需要根据函数的返回类型,转换成为对应的数值。


完整的代码如下:


import com.srplab.www.starcore.*;

public class test{
public static void main(String[] args){
StarCoreFactory starcore=StarCoreFactory.GetFactory();
StarServiceClass Service=starcore._InitSimple("test","123",0,0);
StarSrvGroupClass SrvGroup = (StarSrvGroupClass)Service._Get("_ServiceGroup");

//--init csharp raw interface ---*/
SrvGroup._InitRaw("csharp",Service);
//--load csharp module ---*/
SrvGroup._LoadRawModule("csharp","testcs","testcs.dll",false);
//--attach object to testcs.Class1 ---*/
StarObjectClass Class1 = Service._ImportRawContext("csharp","testcs.Class1",true,"");
StarObjectClass inst = Class1._New("","","cle value",44);
String Result = (String)inst._Call("getMessage","java");
System.out.println(Result);

SrvGroup._ClearService();
starcore._ModuleExit();
}
}
java代码用javac编译之后,运行
java test
可以看到正确的输出结果。

如果需要在没有安装CLE的机器上运行,需要将 “libstarcore.dll” “star_java.dll” “star_csharp.dll” “starcore.jar” 拷贝到当前目录,并在运行时指定starcore.jar
java -classpath ./;starcore.jar test
分享到:
评论

相关推荐

    java调用c#样例

    标题"java调用c#样例"指的是使用Java语言通过Jacob库调用C#编写的动态链接库(DLL)。C# DLL通常包含.NET Framework中的方法和功能,而Java应用程序可以借助Jacob库来访问这些功能,从而实现跨语言的互操作性。 ...

    java调用C#封装的dll(jna,com)

    java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)

    JAVA调用C#写的DLL例子

    DLL 文件是一种动态链接库文件,它可以被多个程序同时使用,减少了代码的重复编写和空间的占用。在 C# 中,我们可以使用 Visual Studio 创建一个 DLL 项目,并在其中编写我们的代码。 在 JAVA 中,我们可以使用 JNI...

    Java通过JNI调用DLL动态库

    Java通过JNI调用DLL动态库,亲测试编写

    Java调用C# dll jacob包类资源.zip

    Java调用C# DLL是跨语言交互的一种常见需求,特别是在企业级应用开发中,可能会遇到已有的C#组件需要在Java环境中使用的场景。Jacob(Java COM Bridge)是一个开源项目,它提供了一个Java到COM(Component Object ...

    JAVA通过JNI调用C#dll的整个项目工程

    在C#环境中,使用Visual Studio或其他开发工具创建一个新的类库项目,编写需要被Java调用的公共方法。编译完成后,生成的DLL文件将包含可供其他程序使用的函数。 3. **JNI头文件生成**: 使用Java的`javah`工具,...

    Java 调用 C# DLL

    首先,为了实现Java调用C# DLL,我们需要借助一个名为JNA(Java Native Access)的库。JNA提供了一种无需编写JNI(Java Native Interface)代码就能直接访问本地库的方法。它允许Java代码通过内存映射调用来调用C...

    Java调用C#DLL

    在IT行业中,跨语言通信是常见的需求,...总的来说,Java调用C# DLL涉及了跨平台通信、语言间互操作、库调用等多个复杂知识点。通过学习和实践,你可以掌握这些技术,增强你的编程能力,应对更多复杂系统的设计和开发。

    Java调用C# DLL的方法简介

    - 使用C#创建DLL,定义公共方法供外部调用。 - 在C#中使用`[DllImport]`属性声明C接口,这使得C#代码可以被C代码调用。 - 编写一个C语言的中间层,它会调用C# DLL,并提供符合JNI规范的接口。 2. **C#与C的互...

    JavaInvokeCS-master_JAVA调用C#dll_fightsk4_C#_

    1. **C# DLL开发**:首先,在C#环境中创建一个动态链接库项目,编写需要暴露给Java调用的方法。C#提供了丰富的数据类型和API,可以创建复杂的功能模块。 2. **DLL导出**:在C#中,使用`[DllExport]`特性标记要导出...

    java调用c#写的dll

    本主题聚焦于如何使用Java调用由C#编写的DLL(动态链接库)文件。这种技术通常应用于系统集成、利用已有的C#组件或者服务,以及实现多语言环境下的协作开发。下面将详细阐述这个过程。 首先,C#编写的DLL是.NET框架...

    swig--在java、C#中调用c++写的DLL(以vs2012配置为例)

    在本案例中,我们将探讨如何利用SWIG在Java和C#中调用由C++编写的动态链接库(DLL)。VS2012是Visual Studio 2012的缩写,是一款由Microsoft提供的集成开发环境,用于创建Windows应用、Web应用、移动应用等。 首先,...

    JAVA调用C++/C#的DLL

    标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java Native Interface(JNI)上,这是一种允许Java代码与其他编程语言(如C++或C#)进行交互的标准机制。下面我们将深入探讨这一主题。 首先,JNI是Java平台的...

    Java调用C#的DLL实现方案.rar

    本案例聚焦于如何在Java环境中调用C#编写的动态链接库(DLL)。这通常涉及到中间件技术或者特定的桥接机制。下面将详细阐述这一实现方案。 1. **JNI(Java Native Interface)** Java Native Interface是Java平台...

    java C# 工具

    标题中的“java C# 工具”...对于使用C#的开发者,`System.Data.SQLite.DLL`是一个实用的数据库连接库;对于Java开发者,`j1.8-wix64.exe`和`JavaSetup8u171.exe`提供了Java环境的安装选项,确保能运行和开发Java应用。

    java调用c#

    总结来说,"java调用c#"涉及到Java和.NET平台的互操作性,主要借助于JNI和jni4j库。开发者需要理解JNI的工作原理,以及如何在Java和C#之间建立桥梁,以实现两个不同生态系统的代码共享和通信。在实际开发中,这需要...

    java使用jna调用c#中dll的方法详解

    此外,还需要下载JNA库(jna.jar和jna-platform.jar)以支持Java调用本地库。 步骤如下: 1. 使用C#创建包含待调用方法的.dll文件。 2. 创建C++项目,并设置为CLR模式,编写C++代码以调用C#的.dll。 3. 编译C++项目...

    java调用C#封装的dll方法.doc

    Java 调用C#封装的DLL方法是一个跨语言交互的技术实现,主要涉及到Java Native Interface (JNA)和Jacob库的使用。以下是两种常见的方法详细解释: ### 方法一:使用JNA **JNA(Java Native Access)**是Java平台上...

Global site tag (gtag.js) - Google Analytics