Defect #852
Losing COM reference
0%
Description
I am calling an application through the COM PlugIn, and getting returned
com.servoyguy.plugins.servoycom.RemoteCOM@9b9965
but calling a function to return an object from a function within the app gives me an ActiveX reference of
com.jacob.com.Dispatch@19a09ab
after which, I cannot use any references to the jacob COM reference that I would normally be passed from a servoyguy COM reference.
I'm calling the ActiveX controls within BarTender for opening a simple barcode and attempting to print the barcode to a default printer.
var com = plugins.servoyguy_servoycom.getNewClientJSCOM("BarTender.Application");
if (!com || !com.isJACOBLoaded()) {
plugins.dialogs.showErrorDialog( "Error", "Error loading COM: \\n" + plugins.servoyguy_servoycom.getLastError());
return;
}
com.put("Visible","true");
var test = com.getActiveXComponent();
var formats = com.getChildJSCOM("Formats"); // formats: com.servoyguy.plugins.servoycom.RemoteCOM@9b9965
var formatsFile = formats.call("Open","c:\\\\sample.BTW", "false", ""); //formatsFile: com.jacob.com.Dispatch@19a09ab, no ActiveX behavior from this object
// Program will exit properly if the following three lines are commented out
formatsFile.call("ExportToClipboard",0,0);
application.output("error "+plugins.servoyguy_servoycom.getLastError());
var comItems = formatsFile.get("NamedSubStrings");
com.call("Quit",1); // BarTender.BtSaveOptions.btDoNotSaveChanges = 1
com.release();
History
Updated by Joe Collins almost 10 years ago
Also, BarTender from Seagull Scientific is demoware for 30 days.
Updated by Scott Butler almost 10 years ago
The getChildJSCOM is a work in progress. There is a sample of another use on this ticket: https://www.servoyforge.net/issues/655
Could you try an adjustment to the getChildJSCOM. Instead of:
var formats = com.getChildJSCOM("Formats");
Try:
var formats = com.getChildJSCOM("Formats", "BarTender.Application", []);
Updated by Joe Collins almost 10 years ago
The getChildJSCOM("Formats") does return a useful ActiveX reference.
Calls to that object's methods fail in that the methods do not exist, get, put, etc. as well as any properties.
In the plugin code, getChildJSCOM gets transformed, somehow. (New to plugins, exactly one written...)
return new JSVariant(Dispatch.call(axo, methodName, arg1, arg2, arg3, arg4, arg5));
Versus the getChildJSCOM,
return new RemoteCOM(Dispatch.get(axo, key).toDispatch())
It looks like it's returning the jacob response, but...
Executing within the Console:
=>com.getActiveXComponent()
com.jacob.activeX.ActiveXComponent@182a702 {m_pDispatch:1455185420}
=>com
com.servoyguy.plugins.servoycom.RemoteCOM@e88e50
=>formats = com.getChildJSCOM("Formats", "BarTender.Application", []);
com.servoyguy.plugins.servoycom.RemoteCOM@4c57d4
=>formats.getActiveXComponent()
com.jacob.activeX.ActiveXComponent@30128c {m_pDispatch:1458962620}
=>formatInfo = formats.call("Open","c:\\\\sample.BTW", "false", "")
com.jacob.com.Dispatch@1a9e26b
=>formatInfo
com.jacob.com.Dispatch@1a9e26b
=>formatInfo.getActiveXComponent()
"Error during evaluation:TypeError: Cannot find function getActiveXComponent in object com.jacob.com.Dispatch@1a9e26b."
=>for (item in formats){application.output(item)}
getClass
call
put
get
equals
hashCode
wait
getDispatch
getLastError
getChildJSCOM
getActiveXComponent
notify
toString
isJACOBLoaded
release
notifyAll
=>for (item in formatInfo){application.output(item)}
getClass
isNull
getDouble
equals
getInt
getBoolean
hashCode
wait
getFormattedDate
getDate
notify
toString
getString
notifyAll
Updated by Joe Collins almost 10 years ago
My apologies... misdirected on the call to "Formats".
This line got me a correct RemoteCOM reference, as opposed to the Dispatch reference.
=>format = formats.getChildJSCOM("Open","BarTender.Application",["c://sample.BTW","false",""])
com.servoyguy.plugins.servoycom.RemoteCOM@1220c66
=>for (item in format){application.output(item)}
getClass
call
put
get
equals
hashCode
wait
getDispatch
getLastError
getChildJSCOM
getActiveXComponent
notify
toString
isJACOBLoaded
release
notifyAll
Thank You,
--Joe.