打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Jacob调用COM组件总结,实例
userphoto

2010.05.25

关注
 最近做了一个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包
view plaincopy to clipboardprint?
import com.jacob.activeX.*;  
import com.jacob.com.*; 
import com.jacob.activeX.*;
import com.jacob.com.*;
(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中调用的时候,如果要返回字符串,一定要这样写
    view plaincopy to clipboardprint?
String str = "";  
Variant v = new Variant(str, true);  
comObj.call("HelloWorld", v); 
String str = "";
Variant v = new Variant(str, true);
comObj.call("HelloWorld", v);
    new Variant()的第二个参数,指定是否强制按引用传递 (byref), 对于COM组件中是 out 类型的参数适合用这种
3. 实际应用
   以上是我总结的一些经验,实际应用没有那么复杂.大部分人就是用jacob来操作Office系列组件而已
   而Word, Excel这样的COM组件包含了很多属性, 所以是 comObj.getProperty (......) 不需要 2 部分那么多注意点
   具体例子就不贴了,操作Word.Excel去google一下,例子很多
   如果你需要调用其他的一些COM组件,那么就要注意第二段的一些注意点
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【转】Jacob操作Excel
jacob(word)包括java.dll,jacob.jar下载及相关操作!
Jacob的简单介绍
jacob
delphi 与vb 操作com 区别
java调用com
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服