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
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to