JACOB (Java/COM/ActiveX) - How to troubleshoot event handling?

Posted by Youval Bronicki on Stack Overflow See other posts from Stack Overflow or by Youval Bronicki
Published on 2010-05-03T07:49:29Z Indexed on 2010/05/07 11:08 UTC
Read the original article Hit count: 511

Filed under:
|
|
|

I'm trying to use JACOB to interact with a COM object.

I was able to invoke an initialization method on the object (and to get its properties), but am not getting any events back. The code is quoted below.
I have a sample HTML+Javascript page (running in IE) that successfully receives events from the same object.
I'm considering the following options, but would appreciate any concrete troubleshooting ideas ...

  • Send my Java program to the team who developed the COM object, and have them look for anything suspicious on their side (does the object have a way on knowing whether there's a client listening to its events, and whether they were successfully delivered?)

  • Get into the native parts of JACOB and try to debug on that side. That's a little scary given that my C++ is rusty and that I've never programmed for Windows.

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

© Stack Overflow or respective owner

Related posts about com

Related posts about java