首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用com4j为java检索CATIA部件对象

如何用com4j为java检索CATIA部件对象
EN

Stack Overflow用户
提问于 2014-02-04 16:15:14
回答 1查看 732关注 0票数 0

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

  1. 生成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已经构建了类,我们有:文档和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();

异常: com.sun.proxy.$Proxy9不能转换到catia.PartDocument

以前有没有人遇到过这样的问题,如果是这样的话,我将非常感谢有一个解决办法。

我已经尝试过JACOB,而且它正在工作。文档有一个正确的PartDocument实例,但是代码太难操作了

代码语言:javascript
复制
`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();`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-19 10:24:10

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

代码语言:javascript
复制
Document doc = docs.open(new Holder<>("E:\\test.CATPart"));    
PartDocument part = doc.queryInterface( PartDocument.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21557625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档