2010-05-03 5 views
0

JACOB을 사용하여 COM 개체와 상호 작용하려고합니다.JACOB (Java/COM/ActiveX) - 이벤트 처리 문제를 해결하는 방법?

개체에 대한 초기화 메서드를 호출 할 수 있었고 (해당 속성을 가져올 수는 있지만) 이벤트를 다시 가져 오지 못했습니다. 코드는 아래에 인용되어 있습니다.
동일한 개체에서 이벤트를 성공적으로받는 예제 HTML + Javascript 페이지 (IE에서 실행)가 있습니다.
나는 다음과 같은 옵션을 고려하고 있지만, 어떤 구체적인 문제 해결 아이디어를 부탁드립니다 ...

  • 그들에 의심스러운 아무것도 찾을 COM 개체를 개발 한 팀에 내 자바 프로그램을 전송하고, 이 자신의 (클라이언트가 이벤트를 듣고 있는지, 그리고 성공적으로 전달되었는지 여부를 알 수있는 방법이 있습니까?)

  • JACOB의 기본 부분으로 들어가 디버깅을 시도하십시오. 내 C++이 녹슬었고 Windows 용으로 프로그래밍 한 적도 없다는 점을 감안하면 조금 무서운 것입니다. COM 개체는 윈도우의 컨텍스트에서 실행된다고 보여 눈에 보이지 않는 ActiveX 컨트롤로 기록 된 것을

    그것은 밝혀졌다 :

 
public static void main(String[] args) { 
    try { 
     ActiveXComponent c = new ActiveXComponent(
           "CLSID:{********-****-****-****-************}"); // My object's clsid 
     if (c != null) { 
      System.out.println("Version:"+c.getProperty("Version")); 
      InvocationProxy proxy = new InvocationProxy() {     
       @Override 
       public Variant invoke(String methodName, Variant[] targetParameters) { 
        System.out.println("*** Event ***: " + methodName); 
        return null; 
       } 
      }; 
      DispatchEvents de = new DispatchEvents((Dispatch) c.getObject(), proxy); 
      c.invoke("Init", new Variant[] { 
        new Variant(10), //param1 
        new Variant(2), //param2 
        }); 
      System.out.println("Wating for events ..."); 
      Thread.sleep(60000); // 60 seconds is long enough 
      System.out.println("Cleaning up ..."); 
      c.safeRelease(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     ComThread.Release(); 
    } 
} 

답변

1

여기 내 특정 문제에 대한 솔루션입니다. JACOB 기반 프로그램을 제공 한 후 구성 요소 개발 팀에서이를 "발견"했습니다.

창 컨텍스트를 제공하는 것은 JACOB이하지 않는 것입니다.

우리의 경우 솔루션은 COM을 없애고 (JNA를 사용하여 네이티브 DLL에서 직접 C 함수를 호출하는 것입니다).

1

옵션 com.jacob.debug=true와 자바를 실행하여, 야곱이에서 디버깅 돌고 이벤트지고 문제를 해결하는 쉬운 방법 :

Thread-0: InvocationProxy: trying to invoke Change on [email protected] 
Thread-0: InvocationProxy: listener ([email protected]) doesn't implement Change 
: 모든 이벤트를받은

java -Dcom.jacob.debug=true ... 

가 표준 오류 (또는 출력)에 표시된다

관련 문제