Calling Windows COM interface and get Response

75 Views Asked by At

I have a system that has Windows COM interface so that external applications can connect to it and it has following details

Interface: InterfaceName Flags: (1234) Dual OleAutomation Dispatchable GUID: {ABCDEFG-ABCD-1234-ABCD-ABCDE1234} I'd like to connect to this interface through Java Spring Application, it will sends a request to this interface and process the response.

I've tried to use the following code

 ActiveXComponent mf = new ActiveXComponent("ApplicationName.InterfaceName");
        try {
          Dispatch f2 = mf.QueryInterface(" {ABCDEFG-ABCD-1234-ABCD-ABCDE1234} ");
          Dispatch.put(f2,  201,  new Variant("Request String"));
        } catch (Exception e) {
          e.printStackTrace();
        }

The executable file opens but it doesn't do what I want. I want to do the following.

  1. How do I make sure, my interface has bee registered, I can see it under

    Computer\HKEY_CLASSES_ROOT\ApplicationName.InterfaceName
    
  2. Using ActiveXComponent opens the instance of application, which is not required. Application is already running.

  3. call the interface with dispid.

  4. Retreive the response from the call/put/invoke ( which suits best for my requiremet ? ) and process the response.

I'm working first time with JAVA-COM_Interface and don't have much experience with it also I could find very few examples on the internet for it and I tried to convert the example I found for my project, also I am not sure the approach I am taking to call the interface is correct or not I would be glad if you can give a hand!

1

There are 1 best solutions below

0
On

I have resolved this using JACOB lib.

1) Download JACOB folder from here.

2) Check your application is working & has details under

Computer\HKEY_CLASSES_ROOT\ApplicationName.InterfaceName

3) Make sure ApplicationName.dll file is registered. If not use this link for more info regsvr32

4) Use this Java Code to send data to COM Interface with below simple code.

Dispatch dispatch = new Dispatch("Application.InterfaceName");            
Variant response = Dispatch.call(dispatch, <DISPID>, message); 
syso(response.getString()); // to print the response

Hope this helps.