这是C ++代码:
#import "path\to\catia\intel_a\code\bin\InfTypeLib.tlb" no_namespace
// ...
ApplicationPtr catia;
catia.CreateInstance("CATIA.Application");
catia->PutVisible(VARIANT_TRUE);
我想用com4j用Java调用相同的CATIA API。根据com4j教程页面,Java定义是通过以下命令生成的:
java -jar ..\..\tlbimp.jar -o catia -p catia InfTypeLib.tlb
但是结果ClassFactory没有静态方法来创建COM对象。
import com4j.*;
/**
* Defines methods to create COM objects
*/
public abstract class ClassFactory {
private ClassFactory() {} // instanciation is not allowed
}
然后我尝试了另一个类型库'CATIAAppTypeLib.tlb'。
import com4j.*;
/**
* Defines methods to create COM objects
*/
public abstract class ClassFactory {
private ClassFactory() {} // instanciation is not allowed
public static org.huys.catia.AppType._CATIAApp createCATIAAppObj() {
return COM4J.createInstance( org.huys.catia.AppType._CATIAApp.class, "{5A29422A-F2B0-11D4-A3AA-00D0B756AD5D}" );
}
public static org.huys.catia.AppType.CATIAVBAHostingApplication createCATIAVBAHostingApplicationImpl() {
return COM4J.createInstance( org.huys.catia.AppType.CATIAVBAHostingApplication.class, "{0663D095-471D-11D2-9AA3-00A024941EF0}" );
}
}
在Java中调用这些方法时,我得到了
com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153
我找不到为Application接口创建实例的方法。
任何人都可以帮助我吗?感谢。
答案 0 :(得分:0)
为InfTypeLib.tlb生成的ClassFactory不包含用于创建Application实例的静态方法。
这可以通过手动添加方法来解决。
public static catia.Application createApplication() {
return COM4J.createInstance( org.huys.catia.Application.class, "{87fd6f40-e252-11d5-8040-0010b5fa1031}" );
}
可以在注册表中找到“CATIA.Application”的GUID。或者只是用字符串替换它。