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

如何使用com4j for java检索CATIA零件对象,java,jacob,com4j,catia,Java,Jacob,Com4j,Catia,我曾尝试使用com4j获取Catia文件的PartDocument,但当我获取对象时,它是一个Document对象,而不是PartDocument对象。因此,我无法访问对象的“部分”方法。我试图将文档转换为PartDocument,但系统出现转换异常。 我尝试过使用Java7x86或64,最终得到了相同的结果 我使用 java-jar-tlbimp.jar-OE:\testcatia\src-p catia InfTypeLib.tlb java-jar-tlbimp.jar-OE:\testc

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

  • 我使用
  • java-jar-tlbimp.jar-OE:\testcatia\src-p catia InfTypeLib.tlb

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

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

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

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

  • 我的程序代码

    Application-app=COM4J.createInstance(catia.Application.class,“catia.Application”);
    Documents docs=app.Documents();
    PartDocument partdoc=(PartDocument)docs.open(新持有者(“E:\\test.CATPart”);
    Part Part=partdoc.Part();
    

  • 例外:com.sun.proxy.$Proxy9不能转换为catia.PartDocument

    以前是否有人遇到过此类问题,如果是这样,我将非常感谢找到解决方案

    我已经尝试了jacobapi,它正在工作。文档具有正确的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();`
    

    您必须使用QueryInterface()

    Document doc=docs.open(新的持有者(“E:\\test.CATPart”);
    PartDocument part=doc.queryInterface(PartDocument.class);
    
    Document doc = docs.open(new Holder<>("E:\\test.CATPart"));    
    PartDocument part = doc.queryInterface( PartDocument.class);