【问题标题】:How to retrieve CATIA Part object with com4j for java如何使用 com4j for java 检索 CATIA Part 对象
【发布时间】:2014-02-04 16:15:14
【问题描述】:

我尝试使用 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 扩展 Document)

  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();

异常: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();`

【问题讨论】:

    标签: java jacob com4j catia


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 2020-05-15
      • 2013-12-19
      相关资源
      最近更新 更多