`

Jacob调用COM组件总结,实例

 
阅读更多

最近做了一个Java Jacob调用COM组件的东西,其中遇到了不少问题,现在把经验总结一下和大家分享。

1.Jacob安装

Google一下,下载Jacob最新版。我这里用的是Jacob-1.15

把Jacob.jar放到你Java工程的lib目录下,引入项目

Jacob自带了两个dll, jacob-1.15-M3-x64.dll 和jacob-1.15-M3-x86.dll,把这两个放到C:/Windows/System32下,很多人忘了这一步导致后面调用失败

2.Jacob使用

引用Jacob包

(1) COM组件名称

调用COM组件的时候,很多人都在网上抄来抄去(主要是调用Word),而没有弄明白其中的原理.

首先,COM组件有一个全局的名称,制作COM组件的时候必须指定,这个名称可以用Windows 2000或Windows 2003的Oleview工具查看到,在Visual Studio中Add reference中看到的是COM组件的描述,不是名称!

例如

ActiveXComponent comObj = new ActiveXComponent("Word.Application");

COM组件的名字叫 "Word",而Application是COM组件中实现的一个对象.

如果自己做一个COM组件叫 A, 里面有一个 ICalc的接口, Calc实现了ICalc接口

那么应该这么调用: ActiveXComponent comObj = new ActiveXComponent("A.Calc");

(2)IDispatch

COM组件中的接口必须派生自 IDispatch, 否则Jacob无法调用!

我在做一个测试COM组件的时候碰到了这个问题, 我的接口派生自 IUnknown, 所以jacob提示无法找到dispatch interface

当然,几乎所有的商业COM组件都是实现了IDispatch接口的

(3)数据类型, 参数

VB, VC++, Delphi, VS 这样的开发工具都可以创建COM组件,但是数据类型上需要注意.

Delphi做的COM组件处理字符串一定要使用 WideString类型, 在TypeLib 里需要用 BSTR 或者 BSTR*,

用LPSTR 或者 LPSTR * (在Delphi里映射为PChar (PAnsiChar)) 做的参数, .NET里可以调,但是Java里用jacob就不行了

另外参数的 in, out 很关键, 尽量不要用 in,out 这样的参数, 而是 in a, out b 这样

对于字符串, 如果是out , 那么COM组件中要为这个字符串构造内存空间再设值, Delphi中 字符串是值类型, 这个一定要注意

GetMem(a, 1000);

FillChar(a^, 1000, 0);

StrCopy(......)

jacob中调用的时候,如果要返回字符串,一定要这样写

new Variant()的第二个参数,指定是否强制按引用传递 (byref), 对于COM组件中是 out 类型的参数适合用这种

3. 实际应用

以上是我总结的一些经验,实际应用没有那么复杂.大部分人就是用jacob来操作Office系列组件而已

而Word, Excel这样的COM组件包含了很多属性, 所以是 comObj.getProperty (......) 不需要 2 部分那么多注意点

具体例子就不贴了,操作Word.Excel去google一下,例子很多

如果你需要调用其他的一些COM组件,那么就要注意第二段的一些注意点

分享到:
评论

相关推荐

    JAVA + JACOB调用c++COM组件

    总之,Java通过JACOB调用C++ COM组件是一种跨语言集成的有效方式,它允许Java应用利用C++组件的功能。尽管涉及到JNI和对底层细节的理解,但通过JACOB库,这一过程变得相对简单和直观。在实际项目中,确保正确处理...

    使用JACOB工具调用COM组件

    接下来,在Java端,使用JACOB调用这个COM组件。引入必要的JACOB库后,创建`Dispatch`对象,传入COM组件的ProgID(在本例中是"MathProj.Math"),然后通过`Dispatch.call`方法调用COM组件的方法,如`Add`和`Mult`,并...

    java调用com组件实例

    在Java中调用COM组件,可以利用Java的JNI(Java Native Interface)或者第三方库如JACOB(Java Advanced COM Bridge)来实现。 **一、JACOB库的介绍** JACOB是一个Java库,它允许Java程序直接调用COM组件,无需通过...

    C++ COM 组件 java + jacob 调用,jacob调用详情请看jacob栏

    以下是一些关于如何使用Jacob调用C++ COM组件的关键知识点: 1. **Jacob库的安装**:首先,你需要下载Jacob库的jar文件,并将其添加到Java项目的类路径中。同时,还需要提供对应的dll文件,通常是`jacob.dll`,将其...

    使用jacob调用com组件把excel文件转存为PDF文件的实现方式

    总结来说,使用Jacob调用COM组件转换Excel为PDF是一种可行的方法,尤其适用于Java开发者。但是,这种方法可能受到系统环境的限制,并且在处理大量文件或高并发场景时可能性能较低。对于更复杂的转换需求,可以考虑...

    jacob调用自定义宏

    jacob调用自定义宏实现Java对Word的完美操作 jacob是一个Java-COM桥接器,允许Java程序与COM组件进行交互。在这个示例中,我们使用jacob来调用Word的自定义宏,实现Java对Word的完美操作。 标题: jacob调用自定义...

    java jacob调用autocad读取文件

    Java Jacob调用AutoCAD读取文件是一种常见的技术实践,它允许开发者通过Java程序与AutoCAD进行交互,实现对DWG或DXF等AutoCAD文件的读取操作。Jacob(Java和COM的桥梁)是一个Java库,它使得Java应用程序能够直接...

    JAVA调用COM组件

    java使用jacob包,调用VS2010编译的COM动态库 其中,包括如下信息: 1、jacob支持JDK1.6、1.7、1.8,支持win32、win64 2、附带有调用COM的java示例 3、运行run.bat,将测试示例一键打包,并同时输出测试结果(实例中...

    jacob/js调用ocx控件的demo

    在描述中提到的"主要涵盖jacob调用ocx控件的方法以及事件的源码demo"部分,你可以期待看到以下内容: 1. **方法调用**:源码中会展示如何使用Jacob的`ActiveX Invoker`类来调用OCX控件的方法。这通常涉及到创建`...

    jacob-java调用word

    JACOB(Java COM Bridge)是一个用Java编写的COM自动化的桥接库,允许Java程序调用和控制微软COM组件,如Word、Excel和Outlook等。通过JACOB,Java开发人员可以创建和操作Word文档,执行宏命令,甚至将Word文档转换...

    通过 JACOB 实现 Java调用ocx控件

    然后,通过`newActiveXComponent()`创建一个ActiveX组件实例,并传入之前获取的控件名。之后,就可以通过Dispatch接口操作COM组件的属性和方法了。 代码示例中,首先创建了一个名为`xl`的`ActiveXComponent`实例,...

    (转)Java jacob调用打印机打印word文档

    总结起来,Java Jacob库为Java开发者提供了一种调用Windows COM组件的能力,使得在Java中实现打印Word文档成为可能。通过理解Jacob的工作原理,掌握相关API的使用,开发者可以构建高效、可靠的自动化打印解决方案。

    java调用ocx控件,jacob,jar和dll文件

    Java调用OCX控件是跨平台编程中的一项技术挑战,因为OCX(Object Linking and Embedding Control)是微软Windows环境下的组件对象模型(COM)控件。然而,通过第三方库如Jacob(Java和COM的桥梁),Java开发者能够在...

    用jacob 做的 word导出实例

    首先,jacob是一个开源的Java库,它为Java程序员提供了一个接口,使得可以在Java代码中调用COM组件,例如Microsoft Office套件中的Word。这使得开发者能够利用Java编程语言实现对Word文档的操作,如读取、写入和格式...

    操作com组件的可以java直接调用vb的dll

    当Java通过Jacob调用这些DLL时,实际上是调用了VB中的特定函数,实现特定的功能,例如读写Excel文件或操作Word文档。 4. 操作Excel和Word:在Windows环境中,Microsoft Office提供了丰富的COM接口供其他程序调用,...

    Com组件实例

    COM是一种二进制标准,定义了组件如何暴露接口,以及如何通过接口调用组件的方法。COM组件不依赖特定的编程语言,因为它们通过接口进行通信,接口是由一组纯虚拟函数组成的抽象类。这意味着C++、VB、Java等不同语言...

    JACOB组件jar包和dll

    3. **使用JACOB**:在Java代码中,导入JACOB的相关类,如`com.jacob.activeX.ActiveXComponent`,然后创建ActiveXComponent实例,通过该实例调用COM对象的方法。 4. **文档操作**:例如,如果要将Word文档转换为PDF...

    java通过jacob 实现调用windows自带控件 实现文字转语音播放功能!

    Jacob是一个开源项目,它的主要目标是为Java开发者提供一个方便的方式来调用COM组件和Windows API。通过Jacob,Java代码可以无缝地与Windows操作系统交互,包括访问ActiveX控件,这在处理文字转语音任务时非常有用,...

    JACOB 将文字转换为声音 实例代码

    首先,JACOB全称为Java COM Bridge,是一个用于在Java程序中调用Windows COM组件的开源库。它通过JNI(Java Native Interface)提供了一种方式,使得开发者能够在Java应用中直接操作COM对象,例如Microsoft的Text To...

    java操作com组件

    总结起来,Java操作COM组件是跨平台开发中的一种重要技术,JACOB作为其中的关键工具,使得Java开发者能够利用.NET Framework中的COM组件,扩大了Java的应用范围。通过理解并熟练掌握JACOB的使用,Java程序员可以在...

Global site tag (gtag.js) - Google Analytics