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で同じCATIAAPIを呼び出したい。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
}
次に、別のtypelib'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
アプリケーションインターフェイスのインスタンスを作成するメソッドが見つかりません。
誰かがこれを手伝ってくれますか?ありがとう。