On Wednesday, October 16, 2013 1:53:24 PM UTC+5:30, Bobby Holley wrote:
> As you've discovered, there's a lot of magic and boilerpate that's
> 
> easy to get wrong. You can find some simple test XPCOM components in
> 
> js/xpconnect/components. Try grabbing one of those, making sure that
> 
> it works, and then iterating on it to turn it into what you need.
> 
> 
> 
> bholley
> 
> 
> 
> On Wed, Oct 16, 2013 at 10:16 AM, Vasu Yadav <vasuyadavkri...@gmail.com> 
> wrote:
> 
> > On Friday, October 4, 2013 6:16:36 PM UTC+5:30, Bobby Holley wrote:
> 
> >> On Fri, Oct 4, 2013 at 2:36 PM, <vasuyadavkri...@gmail.com> wrote:
> 
> >>
> 
> >>
> 
> >>
> 
> >> > Based on my understanding, I need to create a JS XPCOM component apart
> 
> >>
> 
> >> > from the existing C++ XPCOM component I already have. All the JavaScript
> 
> >>
> 
> >> > function calls need to be made from JS XPCOM component.
> 
> >>
> 
> >> >
> 
> >>
> 
> >>
> 
> >>
> 
> >> Precisely.
> 
> >>
> 
> >>
> 
> >>
> 
> >>
> 
> >>
> 
> >> > How will the C++ XPCOM and JS XPCOM communicate to each other? Can we
> 
> >>
> 
> >> > instantiate JS XPCOM component from C++ XPCOM Component?
> 
> >>
> 
> >> >
> 
> >>
> 
> >>
> 
> >>
> 
> >> Yes. The great the about XPCOM components is that they can be instantiated
> 
> >>
> 
> >> and manipulated in either C++ or JS - the language of the implementation
> 
> >>
> 
> >> doesn't matter.
> 
> >>
> 
> >>
> 
> >>
> 
> >> >
> 
> >>
> 
> >> > I want to deliver only one .xpi to my customers. I hope it is possible to
> 
> >>
> 
> >> > package both C++ XPCOM and JS XPCOM components in the same .xpi file.
> 
> >>
> 
> >> > Please let me know if this is possible and whether you see any problems 
> >> > in
> 
> >>
> 
> >> > this approach.
> 
> >>
> 
> >> >
> 
> >>
> 
> >>
> 
> >>
> 
> >> Yep, that should work just fine.
> 
> >>
> 
> >>
> 
> >>
> 
> >> Here are some links that might be useful:
> 
> >>
> 
> >>
> 
> >>
> 
> >> https://developer.mozilla.org/en/docs/How_to_Build_an_XPCOM_Component_in_Javascript
> 
> >>
> 
> >> http://kb.mozillazine.org/Implementing_XPCOM_components_in_JavaScript
> 
> >>
> 
> >>
> 
> >>
> 
> >> bholley
> 
> >
> 
> > Sorry for troubling you again.
> 
> >
> 
> > I am trying to create one sample JavaScript XPCOM component.But not able to 
> > instantiate JavaScript XPCOM component from C++ code.
> 
> >
> 
> > Steps to create JavaScript XPCOM component-
> 
> > 1) Create nsIHelloWorld.idl file for nsIHelloWorld interface.
> 
> > 2) Create nsIHelloWorld.js file
> 
> > 3) Generating .xpt and header file using Python22.0.
> 
> > 4) Instantiate JavaScript XPCOM component from C++ code.
> 
> >
> 
> > Code-
> 
> > nsIHelloWorld.idl
> 
> > ----------------------------------------------------------
> 
> > #include "nsISupports.idl"
> 
> > [scriptable, uuid(8e001740-322b-11e3-aa6e-0800200c9a66)]
> 
> > interface nsIHelloWorld : nsISupports
> 
> > {
> 
> >   string Hellovasu();
> 
> > };
> 
> > ----------------------------------------------------------
> 
> >
> 
> > nsIHelloWorld.js
> 
> > -----------------------------------------------------------------------------------------------------
> 
> > Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
> 
> > function HelloWorld()
> 
> > {
> 
> > }
> 
> > HelloWorld.prototype = {
> 
> >   classDescription: "My Hello World Javascript XPCOM Component",
> 
> >   classID:          Components.ID("{031572f4-3629-11e3-98fd-ce3f5508acd9}"),
> 
> >   contractID:       "@keynote.com/firefox/helloworld;1",
> 
> >   QueryInterface: 
> > XPCOMUtils.generateQI([Components.interfaces.nsIHelloWorld]),
> 
> >
> 
> >   Hellovasu: function() {
> 
> >   return "Hello World!";
> 
> >   }
> 
> > };
> 
> > var components = [HelloWorld];
> 
> > if (XPCOMUtils.generateNSGetFactory)
> 
> >     this.NSGetFactory = XPCOMUtils.generateNSGetFactory([components]); // 
> > Firefox 4.0 and higher
> 
> >  else
> 
> >     var NSGetModule = XPCOMUtils.generateNSGetModule([components]); // 
> > Firefox 3.x
> 
> > ----------------------------------------------------------------------------------------------------
> 
> >
> 
> > chrome.manifest
> 
> > ----------------------------------------------------------------------------------
> 
> > interfaces components/nsIHelloWorld.xpt
> 
> > component 031572f4-3629-11e3-98fd-ce3f5508acd9 nsIHelloWorld.js
> 
> > contract @keynote.com/firefox/helloworld;1 
> > {031572f4-3629-11e3-98fd-ce3f5508acd9} 
> > application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
> 
> > -----------------------------------------------------------------------------------
> 
> >
> 
> > Instantiate JavaScript XPCOM compnent from C++ code
> 
> > -----------------------------------------------------------------------------------------------
> 
> > #include "nsComponentManagerUtils.h"
> 
> > #include "nsIHelloWorld.h"
> 
> >
> 
> > nsCOMPtr<nsISupports> iSupports = 
> > do_CreateInstance("@keynote.com/Firefox/helloworld;1",&rv1);
> 
> > or
> 
> > nsCOMPtr<nsIHelloWorld> ihello = 
> > do_CreateInstance("@keynote.com/Firefox/helloworld;1",&rv1);
> 
> >
> 
> > Not able to instantiate helloworld component.
> 
> > -----------------------------------------------------------------------------------------------
> 
> > Logs value for IHello and rv1 in hexa formet- IHello=0 rv1=80040154
> 
> >
> 
> > Do you fell anything missing or wrong in this code? If you have any better 
> > approach or solution please suggest me. I am completely stuck here.
> 
> >
> 
> > Regards
> 
> > Vasu
> 
> >
> 
> > _______________________________________________
> 
> > dev-platform mailing list
> 
> > dev-platform@lists.mozilla.org
> 
> > https://lists.mozilla.org/listinfo/dev-platform



I truly thankful for your help. 
As you suggest I had gone through XPCOM components of js/xpconnect/components.

Now I am able to Instantiate helloword JS-XPCOM component, when I am trying to 
return object to nsISupports interface pointer. but not same when  directly 
tried to return object to nsIHelloWorld interface pointer.

    nsCOMPtr<nsISupports> iSupports1 = 
do_CreateInstance("@vasu.com/helloworld;1",&rv1);
   In that case I m able to instantiate.

    nsCOMPtr<nsIHelloWorld> hello = 
do_CreateInstance("@vasu.com/firefox/helloworld;1",&rv2);
    do_CreateInstance function is always returning null when I try to return 
object directly to  nsIHelloWorld interface pointer.


Trying to call hello() function of JS-XPCOM from C++XPCOM code. I tried to 
confirm  Hello() function got call or not? For that reason I added alert and 
console log message inside a function of hello(), but none them work.  
  

Can we pass XPCOM Interface pointer(i.e. nsIDOMWindow, nsIDocShell..) from C++ 
XPCOM component to JavaScript XPCOM component? If yes then how?

Please share some useful post, data regarding communication between C++ XPCOM 
component  to JavaScript XPCOM component.

Regards
Vasu
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to