- 浏览: 274575 次
- 性别:
- 来自: 武汉
文章分类
1,大概步骤
1) 准备好 DLL文件(32位和64位系统下编译的 有差别, 不能通用)。
2) 装好jdk和eclipse.
3) 下载jacob最新的包(目前是1.7)
4) 将jacob.jar导入到eclipse项目路径, 将jacob-1.17-M2-x64.dll(或者是jacob-1.17-M2-x32.dll)添加到环境变量path.
5) 可以开始.
2. 小例子
1).NET代码
创建InvokeCSharp项目,在InvokeCSharp.cs文件中加如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace InvokeCSharp
{
[Guid("C41D14FD-F719-41fc-94CD-4B64D19F44B0")]
public interface IExampleClass
{
[DispId(1)]
string HelloJava(string name);
}
[Guid("70FE7452-0D4B-4717-8352-FEB0F6E830C1"),
ClassInterface(ClassInterfaceType.None)]
public class ExampleClass : IExampleClass
{
public ExampleClass() { }
public string HelloJava(string name)
{
return "Java传递过来的参数为: " + name;
}
}
}
2)需要注意的是编译前的配置步骤,主要有以下几步:
1、解决方案资源管理器中右键点击项目名称“InvokeCSharp”,选择属性
2、在“应用程序”页签中,点击“程序集信息”按钮,在弹出的对话框中勾上最后一
个复选框“使程序集COM可见”
3、在“生成”页签中,勾上最后一个复选框“为COM互操作注册”
4、生成“InvokeCSharp”项目
5、在项目的Debug\bin文件夹下会有这样几个文件:一个是InvokeCSharp.dll,另
一个是InvokeCSharp.tlb,这个就是我们要的COM程序
6、最后,注册COM,打开“Visual Studio 命令提示”,进入InvokeCSharp项目
的Debug\bin文件夹,运行“regasmInvokeCSharp.dll /tlb:InvokeCSharp.tlb”,这样就注册了COM,regasm为.NET Framework 工具中的程序集注册工具。注册成功后,每次C#程序有修改,都不再需要重新注册了
3)java 代码
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.sun.xml.internal.ws.resources.DispatchMessages;
public class JavaInvokeCSharpClass {
private final String DLL_NAME = "DLLforVB.ComDLLforVB";
private ActiveXComponent dotnetCom = null;
private Dispatch dispatch = null;
private Variant var = null;
public JavaInvokeCSharpClass() {
dotnetCom = new ActiveXComponent(DLL_NAME);
dispatch = dotnetCom.getObject();
}
public static void main(String[] args) {
try {
JavaInvokeCSharpClass test = new JavaInvokeCSharpClass();
test.var = test.dispatch.call(test.dotnetCom, "ToolGetLocalIP");
String str = test.var.toString();
System.out.println(str);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
1) 准备好 DLL文件(32位和64位系统下编译的 有差别, 不能通用)。
2) 装好jdk和eclipse.
3) 下载jacob最新的包(目前是1.7)
4) 将jacob.jar导入到eclipse项目路径, 将jacob-1.17-M2-x64.dll(或者是jacob-1.17-M2-x32.dll)添加到环境变量path.
5) 可以开始.
2. 小例子
1).NET代码
创建InvokeCSharp项目,在InvokeCSharp.cs文件中加如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace InvokeCSharp
{
[Guid("C41D14FD-F719-41fc-94CD-4B64D19F44B0")]
public interface IExampleClass
{
[DispId(1)]
string HelloJava(string name);
}
[Guid("70FE7452-0D4B-4717-8352-FEB0F6E830C1"),
ClassInterface(ClassInterfaceType.None)]
public class ExampleClass : IExampleClass
{
public ExampleClass() { }
public string HelloJava(string name)
{
return "Java传递过来的参数为: " + name;
}
}
}
2)需要注意的是编译前的配置步骤,主要有以下几步:
1、解决方案资源管理器中右键点击项目名称“InvokeCSharp”,选择属性
2、在“应用程序”页签中,点击“程序集信息”按钮,在弹出的对话框中勾上最后一
个复选框“使程序集COM可见”
3、在“生成”页签中,勾上最后一个复选框“为COM互操作注册”
4、生成“InvokeCSharp”项目
5、在项目的Debug\bin文件夹下会有这样几个文件:一个是InvokeCSharp.dll,另
一个是InvokeCSharp.tlb,这个就是我们要的COM程序
6、最后,注册COM,打开“Visual Studio 命令提示”,进入InvokeCSharp项目
的Debug\bin文件夹,运行“regasmInvokeCSharp.dll /tlb:InvokeCSharp.tlb”,这样就注册了COM,regasm为.NET Framework 工具中的程序集注册工具。注册成功后,每次C#程序有修改,都不再需要重新注册了
3)java 代码
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.sun.xml.internal.ws.resources.DispatchMessages;
public class JavaInvokeCSharpClass {
private final String DLL_NAME = "DLLforVB.ComDLLforVB";
private ActiveXComponent dotnetCom = null;
private Dispatch dispatch = null;
private Variant var = null;
public JavaInvokeCSharpClass() {
dotnetCom = new ActiveXComponent(DLL_NAME);
dispatch = dotnetCom.getObject();
}
public static void main(String[] args) {
try {
JavaInvokeCSharpClass test = new JavaInvokeCSharpClass();
test.var = test.dispatch.call(test.dotnetCom, "ToolGetLocalIP");
String str = test.var.toString();
System.out.println(str);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
发表评论
-
获取几种项目路径的方式(Done)
2013-10-09 11:20 1011// 第一种:获取类加载的根路径 D:\git\daoti ... -
Spring 学习笔记-1
2013-07-23 13:51 879一,Maven配置 <dependency> &l ... -
Github问题
2013-07-03 10:28 1156错误提示: The current branch is not ... -
Java Basis
2013-03-14 11:03 865--java 1,类的关系 • De ... -
java Final 关键字
2013-03-07 10:21 8011、final类不能被继承,没有子类,final类中的方法默认 ... -
Java中的Enum用法介绍
2013-01-10 17:17 106611. 关于Java Enum: JDK1.5之前没有Enum ... -
Eclipse WTP 配置tomcat 但无法访问tomcat主页的解决方法
2013-01-07 14:07 1404首先,在Eclipse的servers view下双击要配置的 ... -
JACOB API
2012-12-21 14:37 623901.import com.jacob.activeX.Act ... -
(Done)关于 instance of
2012-07-19 10:26 9881. “String” instanceof Object - ... -
启动tomcat 7 一闪而过
2012-06-06 23:12 8195问题概述: 在win7下,,点击startup.bat , 命 ... -
java的final和static总结
2012-05-15 23:53 989一、final 根据程序上下文环境,Java关键字final ... -
关于String的 split方法
2012-04-28 10:35 11371、如果用“.”作为分隔的话,必须是如下写法:String.s ... -
int 和 String 互相转换的多种方法
2012-02-29 16:38 8361 如何将字串 String 转换成整数 int? A. 有 ... -
Eclipse External Tools --变量设置
2012-01-09 14:18 11204外部工具的输出显示在控制台视图中。 在配置外部工具时可使用如 ... -
java的System.getProperty()方法可以获取的值
2011-12-26 14:30 4937java.version Java 运 ... -
java的comparable接口和comparator
2011-12-01 16:24 1712使用这两个接口,用于Collections.sort或Arra ... -
JUnit 4 常用的几个 annotation
2011-11-15 14:15 1059[size=large][size=medium]@Befor ... -
通过APACHE POI操作OFFICE --EXCEL(一)
2011-11-07 18:20 1354一、简介 使用Java程序读写Microsoft Office ... -
键盘数字对应的ASCII码
2011-10-31 16:41 2360keycode 1 = 鼠标左键 keycode 2 = 鼠标 ... -
一段java代码
2011-10-21 17:50 908import java.io.InputStream; im ...
相关推荐
接下来,为了能够在Java应用中使用Jacob,你需要确保系统路径中包含了`jacob.dll`。这个动态链接库文件实现了Java层与COM层的桥接,使得Java能够调用COM组件。通常,`jacob.dll`需要放在Java的系统库目录下,或者在...
当Java通过Jacob调用这些DLL时,实际上是调用了VB中的特定函数,实现特定的功能,例如读写Excel文件或操作Word文档。 4. 操作Excel和Word:在Windows环境中,Microsoft Office提供了丰富的COM接口供其他程序调用,...
其中一种方案是使用Java Native Access (JNA) 来调用通过C++封装的C# DLL文件。 **步骤详解:** **1. 创建C# COM组件:** - **新建项目:** 在Visual Studio中创建一个新的类库项目,并命名为`COMTest`。 - **...
标题"java调用c#样例"指的是使用Java语言通过Jacob库调用C#编写的动态链接库(DLL)。C# DLL通常包含.NET Framework中的方法和功能,而Java应用程序可以借助Jacob库来访问这些功能,从而实现跨语言的互操作性。 ...
以下是一个简单的示例,演示如何使用JACOB调用.NET DLL中的一个方法: ```java import com.jacob.com.*; public class JavaCallDotNet { public static void main(String[] args) { ComThread.initMTA(true);...
标题中的“jacob jar包”指的是Jacob库的Java版本,它包含了Java类库,使得开发者可以在Java代码中调用Jacob的功能。而“dll文件”则是Jacob运行时所需的动态链接库,是Windows系统下的本地库文件,用于支持Jacob在...
至于压缩包内的文件"jacob-1.14.3-x64_x86",很可能包含了Jacob库的JAR文件(供Java程序使用)、对应的JNI库(如dll文件)以及可能的文档和示例代码。使用这些文件时,开发者需要将JAR添加到Java项目的类路径中,并...
以下是使用 Jacob 调用 C# DLL 的基本步骤: 1. **引入 Jacob 库**:首先,你需要将 Jacob 相关的 JAR 包(如 jacob.jar)添加到 Java 项目的类路径中。这个 JAR 包包含了 Java 对 COM 进行操作所需的所有 native ...
在"javacom"这个压缩包的子文件中,可能包含了使用JNI或JNA进行DLL调用,以及使用JACOB等工具调用OCX控件的Java源码示例。通过分析这些示例,开发者可以学习如何在实际项目中实现类似的集成。 总结起来,这个压缩包...
### JAVA调用C# DLL文件的关键步骤和技术细节 #### 一、C#编写COM组件 在实际工作中,可能需要在不同编程语言之间进行交互。例如,一个基于Java的应用程序可能需要调用用C#编写的DLL文件来实现某些功能。这通常...
- Jacob是基于JNI(Java Native Interface)的,所以会受到Java版本的限制,确保使用的jacob.dll与Java版本匹配。 - 在开发和部署过程中,确保目标机器上安装了与dll文件相匹配的.NET Framework,因为Jacob依赖于...
5. 性能考虑:虽然Jacob提供了一种便利的方式来调用COM组件,但因为涉及到JNI调用,性能可能不如直接使用.NET或其他原生语言。在性能敏感的应用中,这可能是一个需要考虑的因素。 在实际项目中,`必读.txt`文件可能...
总的来说,"jacob-1.18-M2"是一个完整的Jacob使用包,包含所有必要的组件和文档,使得Java开发者能够方便地在Java程序中集成和使用Windows的COM组件,如进行文字转音频这样的任务。在Windows平台上进行Java开发时,...
Jacob提供了一个接口,让开发者能够在Java中使用那些通常只能在.NET或Visual Basic环境中使用的COM对象。这个库特别适用于需要与Microsoft Office套件集成或者操作其他Windows特定功能的Java应用。 标题"jacob-...
它们处理了底层的互操作性问题,使Java可以直接调用.NET DLL,包括C#的。 6. **C++/CLI中间层** C++/CLI是微软为.NET平台设计的一种C++方言,它允许直接访问.NET Framework的托管代码。可以编写一个C++/CLI项目,...
这个"jacob1.18最新包及源码下载"资源提供的是Jacob项目的最新版本1.18,对于那些在Java应用中需要调用Windows COM接口的开发者来说,这是一个非常有价值的工具。 Jacob库的核心功能是为Java应用程序提供了一个桥梁...
### 第二种方法:Java利用Jacob调用C# DLL 1. **配置Jacob**: - 下载Jacob库(`jacob-x.x.x.dll`和`jacob.jar`),将`jacob.jar`添加到Java项目的类路径中,`jacob-x.x.x.dll`放置在系统路径下或Java库路径中。 ...
这个中间件是为了解决Java语言与COM(Component Object Model)之间的互操作性问题而设计的,使得开发者能够在纯Java环境中调用和利用COM对象的功能,无需编写C++或.NET代码。 JACOB的核心在于它的JNI(Java Native...
综上所述,这个压缩包提供了使用Java和Jacob库将Word文档转换为PDF的解决方案,结合Maven进行项目管理,并附带了DLL处理工具和相关资料。开发者需要了解Java、Jacob、Maven以及COM组件的基本概念,以便成功地在项目...
接着,在Java代码中,需要通过`System.loadLibrary`方法加载DLL,然后就可以使用Jacob提供的Java接口来调用COM组件了。 ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; ...