如何使用com4j for java检索CATIA Part对象

时间:2014-02-04 16:15:15

标签: java jacob com4j catia

我尝试使用com4j来获取Catia文件的PartDocument但是当我得到对象时它是一个Document对象而不是PartDocument对象。因此,我无法访问我的对象的方法“部分”。我尝试将Document转换为PartDocument但系统达到了强制转换异常。 我尝试过使用java 7 x86或64并最终获得相同的结果。

  1. 我使用
  2. 生成java代码

    java -jar tlbimp.jar -o E:\testcatia\src -p catia InfTypeLib.tlb

    java -jar tlbimp.jar -o E:\testcatia\src -p catia SMTypeLib.tlb

    java -jar tlbimp.jar -o E:\testcatia\src -p catia PartTypeLib.tlb

    java -jar tlbimp.jar -o E:\testcatia\src -p catia CATIAAppTypeLib.tlb

    com4j已经构建了类,我们有:Document和PartDocument(PartDocument扩展文档)

    1. 我的程序代码

      Application app = COM4J.createInstance( catia.Application.class, "CATIA.Application" ); Documents docs=app.documents(); PartDocument partdoc = (PartDocument) docs.open(new Holder<>("E:\\test.CATPart")); Part part= partdoc.part();

    2. exception:com.sun.proxy。$ Proxy9无法强制转换为catia.PartDocument

      之前是否有人遇到过此类问题,如果有的话,我会非常感谢解决方案。

      我已经尝试过JACOB API并且它正在运行。 Document有一个正确的PartDocument实例,但代码太难操作

      `ActiveXComponent app =new ActiveXComponent("CATIA.Application");
      app.setProperty("Visible", new Variant(true));
      Dispatch oDocuments = app.getProperty("Documents").toDispatch();
      Dispatch oDocument = Dispatch.call(oDocuments, "Open", "E:\\test.CATPart").toDispatch();
      Dispatch oPart = Dispatch.get(oDocument,"Part").toDispatch();
      Dispatch oBody = Dispatch.get(oPart,"MainBody").toDispatch();`
      

1 个答案:

答案 0 :(得分:0)

您必须使用QueryInterface(https://com4j.java.net/runtime-semantics.html

Document doc = docs.open(new Holder<>("E:\\test.CATPart"));    
PartDocument part = doc.queryInterface( PartDocument.class);