2012-10-10 3 views
0

는 C++ 코드가 함께 CATIA COM API를 자바를 해소하는 방법 :com4j 여기

내가 com4j와 자바 같은 CATIA API를 호출 할
#import "path\to\catia\intel_a\code\bin\InfTypeLib.tlb" no_namespace 

// ... 

ApplicationPtr catia; 

catia.CreateInstance("CATIA.Application"); 

catia->PutVisible(VARIANT_TRUE); 

. com4j 튜토리얼 페이지에 따르면, 자바의 정의는 다음 명령에 의해 생성 된 :

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}"); 
    } 
} 

것은 자바에서 이러한 메서드를 호출 할 때, 내가 응용 프로그램 인터페이스의 인스턴스를 만들 수있는 방법을 찾을 수 없습니다

com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153 

을 얻었다.

아무도 도와 줄 수 있습니까? 감사.

답변

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는 레지스트리에서 찾을 수 있습니다. 아니면 그냥 문자열로 바꿉니다.