Thanks for your comment.

Basically, I'm investigating how to use native library(made by C and C++) in 
B2G. Because I have some native application for android and iPhone. So, I'm 
investigating whether my native library can be reused in B2G.
I had a lot of progress in my work using the js-ctypes. But I met a big problem 
about the callback. I could not use js-ctypes callback because of main thread 
problem. So, I'm trying to use xpcom callback to solve callback problem.

Anyway, now I'm using xpcom for the first time. It is so difficult for me.
After reading your latest comment, I also try to use a different contract ID 
such below:
  1. add contract ID in TESTManager.h
     #define NSDOMMOZBMLMANAGER_CLASSNAME       "BML Manager"
     #define NSDOMMOZBMLMANAGER_CID                     { 0xfb585e70, 0xef3d, 
0x42e9, { 0x9b, 0x9a, 0xf8, 0x53, 0xcb, 0x4c, 0x43, 0x14 } }
     #define NSDOMMOZBMLMANAGER_CONTRACTID      "@mozilla.com/MozBMLManager;1"
  2. add test codes to check function of gecko C++ in TESTManager.js
    var com = 
Components.classes["@mozilla.org/MozBMLManager;1"].createInstance();
    debug("com 111 = " + com);
    com = com.QueryInterface(Components.interfaces.nsIDOMMozBMLManager);
    debug("com 222 = " + com);
    var ret = com.BML_setJSCallBack(test111);
    debug("ret = " + ret);

Unfortunately, I got a error message such as:
E/GeckoConsole( 1021): [JavaScript Error: 
"NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS: '[JavaScript Error: 
"Components.classes['@mozilla.org/MozTESTManager;1'] is undefined" {file: 
"jar:file:///system/b2g/omni.ja!/components/TESTManager.js" line: 166}]' when 
calling method: [nsIDOMMozTESTManager::TEST_Initialize]" {file: 
"app://test.gaiamobile.org/add.js" line: 35}]

I don't know how to add contract ID correctly.
Please check it again and help me.
Thanks again for your help.


2013년 8월 5일 월요일 오전 11시 20분 33초 UTC+9, Josh Matthews 님의 말:
> Yes, the XPCOM component registry sees your JS component as the official 
> 
> implementation of @mozilla.org/testManager;1, so any getService calls 
> 
> will return it. You need to have the C++ implementation use a different 
> 
> contract ID if they're going to exist simultaneously. I still don't 
> 
> understand why you would want that, though.
> 
> 
> 
> On 08/04/2013 09:31 PM, Kilcheon Kim wrote:
> 
> > Hi,
> 
> >
> 
> > Ultimately, I want to call TEST_setJSCallBack of gecko C++(TESTManager.cpp) 
> > from TESTManager.js for testing callback function. So, I tried to add two 
> > interfaces in nsIDOMMozTESTManager.idl, and then, I called 
> > TEST_setJSCallback() function in gecko js(TESTManager.js) such as below:
> 
> >      var com =  Components.classes["@mozilla.org/testManager;1"]
> 
> >                         
> > .getService(Components.interfaces.nsIDOMMozTESTManager);
> 
> >      debug(com);
> 
> >      var ret = com.TEST_setJSCallBack(test111);
> 
> >      debug("SetJSCallBack = " + ret);
> 
> > But, "ret" value is set by TEST_setJSCallBack function of gecko js, not c++ 
> > function.
> 
> > Do you know what is wrong in my codes?
> 
> >
> 
> >
> 
> > 2013년 8월 4일 일요일 오후 3시 12분 48초 UTC+9, Josh Matthews 님의 말:
> 
> >> I don't understand what you are trying to accomplish by having two
> 
> >>
> 
> >> separate implementations of nsIDOMMozTESTManager.
> 
> >>
> 
> >>
> 
> >>
> 
> >> On 08/03/2013 11:10 PM, Kilcheon Kim wrote:
> 
> >>
> 
> >>> Hi,
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> Now I am trying to use xpcom for callback function.
> 
> >>
> 
> >>> But I couldn't call gecko c++ function from gecko js using the XPCOM.
> 
> >>
> 
> >>> My test codes are below.
> 
> >>
> 
> >>> In gecko js (TESTManager.js), I try to call "TEST_setJSCallBack" function 
> >>> but it did not be called.
> 
> >>
> 
> >>> I don't know why gecko c++ function can't be called from gecko js.
> 
> >>
> 
> >>> Please check my sample code and find my mistake or something.
> 
> >>
> 
> >>> Please anybody help me.
> 
> >>
> 
> >>> Thanks.
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> 1. nsIDOMTESTManager.idl
> 
> >>
> 
> >>> ----------------------------------------------------------------------------------------------
> 
> >>
> 
> >>> #include "nsISupports.idl"
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> [scriptable, function, uuid(2b9dfd66-d480-4b0d-9b15-8ed04858fd9c)]
> 
> >>
> 
> >>> interface IJSCallback : nsISupports {
> 
> >>
> 
> >>>       boolean call(in int32_t bogus, in int32_t aData);
> 
> >>
> 
> >>> };
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> [scriptable, uuid(4a096156-1bd7-4f69-b7eb-89371ff82eb5)]
> 
> >>
> 
> >>> interface nsIDOMMozTESTManager : nsISupports
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>     jsval TEST_Initialize(in jsval x, in jsval y, in jsval width, in 
> >>> jsval height);
> 
> >>
> 
> >>>     int32_t TEST_setJSCallBack(in IJSCallback aCallback);
> 
> >>
> 
> >>>     void TEST_add(in int32_t first, in int32_t second);
> 
> >>
> 
> >>>     void TEST_sum(in int32_t first, in int32_t second, in IJSCallback 
> >>> aCallback);
> 
> >>
> 
> >>> };
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> 2. TESTManager.h
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>> #ifndef DOM_TEST_TESTMANAGER_H
> 
> >>
> 
> >>> #define DOM_TEST_TESTMANAGER_H
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #include "nsProxyRelease.h"
> 
> >>
> 
> >>> #include "nsIDOMTESTManager.h"
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>    #define NSDOMMOZTESTMANAGER_CLASSNAME    "TEST Manager"
> 
> >>
> 
> >>>    #define NSDOMMOZTESTMANAGER_CID            { 0xfb585e70, 0xef3d, 
> >>> 0x42e9, { 0x9b, 0x9a, 0xf8, 0x53, 0xcb, 0x4c, 0x43, 0x14 } }
> 
> >>
> 
> >>>    #define NSDOMMOZTESTMANAGER_CONTRACTID    
> >>> "@mozilla.com/MozTESTManager;1"
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> class nsDOMMozTESTManager : public nsIDOMMozTESTManager
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>> public:
> 
> >>
> 
> >>>     NS_DECL_ISUPPORTS
> 
> >>
> 
> >>>     NS_DECL_NSIDOMMOZTESTMANAGER
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     nsDOMMozTESTManager();
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> private:
> 
> >>
> 
> >>>     ~nsDOMMozTESTManager();
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> protected:
> 
> >>
> 
> >>>     /* additional members */
> 
> >>
> 
> >>>     nsCOMPtr<IJSCallback> m_JSCallBack;
> 
> >>
> 
> >>> };
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> class CJSCallback : public IJSCallback
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>> public:
> 
> >>
> 
> >>>     NS_DECL_ISUPPORTS
> 
> >>
> 
> >>>     NS_DECL_IJSCALLBACK
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     CJSCallback();
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> private:
> 
> >>
> 
> >>>     ~CJSCallback();
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> protected:
> 
> >>
> 
> >>>     /* additional members */
> 
> >>
> 
> >>> };
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #endif // DOM_TEST_TESTMANAGER_H
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> 3. TESTManager.cpp
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>> #include "base/basictypes.h"
> 
> >>
> 
> >>> #include "TESTManager.h"
> 
> >>
> 
> >>> #include "TESTCommon.h"
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> using namespace mozilla;
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> NS_IMPL_ISUPPORTS1(nsDOMMozTESTManager, nsIDOMMozTESTManager)
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> nsDOMMozTESTManager::nsDOMMozTESTManager()
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>     /* member initializers and constructor code */
> 
> >>
> 
> >>>       DOM_TEST_LOGI("nsDOMMozTESTManager : constructor");
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> nsDOMMozTESTManager::~nsDOMMozTESTManager()
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>     /* destructor code */
> 
> >>
> 
> >>>       DOM_TEST_LOGI("nsDOMMozTESTManager : destructor");
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> NS_IMPL_CLASSINFO(nsDOMMozTESTManager, NULL, 0, NSDOMMOZTESTMANAGER_CID)
> 
> >>
> 
> >>> NS_IMPL_ISUPPORTS1_CI(nsDOMMozTESTManager, nsIDOMMozTESTManager)
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /* jsval TEST_Initialize (in jsval x, in jsval y, in jsval width, in 
> >>> jsval height); */
> 
> >>
> 
> >>> NS_IMETHODIMP nsDOMMozTESTManager::TEST_Initialize(const JS::Value & x, 
> >>> const JS::Value & y, const JS::Value & width, const JS::Value & height, 
> >>> JS::Value *_retval)
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>       DOM_TEST_LOGI("nsDOMMozTESTManager::TEST_Initialize");
> 
> >>
> 
> >>>       return NS_ERROR_NOT_IMPLEMENTED;
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /* void SetJSCallBack (in IJSCallback aCallback); */
> 
> >>
> 
> >>> NS_IMETHODIMP nsDOMMozTESTManager::TEST_setJSCallBack(IJSCallback 
> >>> *aCallback, int32_t *_retval)
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>       DOM_TEST_LOGI("nsDOMMozTESTManager::TEST_SetJSCallBack");
> 
> >>
> 
> >>>       nsDOMMozTESTManager::m_JSCallBack = aCallback;
> 
> >>
> 
> >>>       *_retval = 123;
> 
> >>
> 
> >>>       return NS_OK;
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /* void add (in int32_t first, in int32_t second); */
> 
> >>
> 
> >>> NS_IMETHODIMP nsDOMMozTESTManager::TEST_add(int32_t first, int32_t second)
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>       DOM_TEST_LOGI("nsDOMMozTESTManager::TEST_add");
> 
> >>
> 
> >>>       bool ret = true;
> 
> >>
> 
> >>>       nsDOMMozTESTManager::m_JSCallBack->Call((int32_t)0, first+second, 
> >>> &ret);
> 
> >>
> 
> >>>       return NS_OK;
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /* void sum (in int32_t first, in int32_t second, in IJSCallback 
> >>> aCallback); */
> 
> >>
> 
> >>> NS_IMETHODIMP nsDOMMozTESTManager::TEST_sum(int32_t first, int32_t 
> >>> second, IJSCallback *aCallback)
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>       DOM_TEST_LOGI("nsDOMMozTESTManager::TEST_sum : first = %d, second = 
> >>> %d, aCallback = %x\n", first, second, aCallback);
> 
> >>
> 
> >>>       PRBool ret = true;
> 
> >>
> 
> >>>       TEST_add(first, second);
> 
> >>
> 
> >>>       return NS_OK;
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> NS_IMPL_ISUPPORTS1(CJSCallback, IJSCallback)
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> CJSCallback::CJSCallback()
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>       DOM_TEST_LOGI("CJSCallback::CJSCallback");
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> CJSCallback::~CJSCallback()
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>       DOM_TEST_LOGI("CJSCallback::~CJSCallback");
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /* boolean call (in int32_t bogus, in int32_t aData); */
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> NS_IMETHODIMP CJSCallback::Call(int32_t bogus, int32_t aData, bool 
> >>> *_retval)
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>       DOM_TEST_LOGI("CJSCallback::Call : bogus = %d, aData = %d\n", 
> >>> bogus, aData);
> 
> >>
> 
> >>>       return NS_OK;
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> 4. TESTCommon.h
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>> #ifndef DOM_TEST_TESTCOMMON_H
> 
> >>
> 
> >>> #define DOM_TEST_TESTCOMMON_H
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #define PR_LOGGING
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #ifndef __func__
> 
> >>
> 
> >>> #ifdef __FUNCTION__
> 
> >>
> 
> >>> #define __func__ __FUNCTION__
> 
> >>
> 
> >>> #else
> 
> >>
> 
> >>> #define __func__ __FILE__
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #ifndef NAN
> 
> >>
> 
> >>> #define NAN std::numeric_limits<double>::quiet_NaN()
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #include "nsThreadUtils.h"
> 
> >>
> 
> >>> #include "nsIDOMTESTManager.h"
> 
> >>
> 
> >>> #include "prlog.h"
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #ifdef PR_LOGGING
> 
> >>
> 
> >>> extern PRLogModuleInfo* gTESTLog;
> 
> >>
> 
> >>> #define DOM_TEST_LOG( type, ... ) PR_LOG(gTESTLog, 
> >>> (PRLogModuleLevel)type, ( __VA_ARGS__ ))
> 
> >>
> 
> >>> #else
> 
> >>
> 
> >>> #define DOM_TEST_LOG( type, ... )
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #define DOM_TEST_LOGA( ... )      DOM_TEST_LOG( 0, __VA_ARGS__ )
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /**
> 
> >>
> 
> >>>    * From the least to the most output.
> 
> >>
> 
> >>>    */
> 
> >>
> 
> >>> enum {
> 
> >>
> 
> >>>     DOM_TEST_LOG_NOTHING,
> 
> >>
> 
> >>>     DOM_TEST_LOG_ERROR,
> 
> >>
> 
> >>>     DOM_TEST_LOG_WARNING,
> 
> >>
> 
> >>>     DOM_TEST_LOG_INFO,
> 
> >>
> 
> >>>     DOM_TEST_LOG_TRACE,
> 
> >>
> 
> >>>     DOM_TEST_LOG_REFERENCES
> 
> >>
> 
> >>> };
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /**
> 
> >>
> 
> >>>    * DOM_CAMERA_LOGR() can be called before 'gCameraLog' is set, so
> 
> >>
> 
> >>>    * we need to handle this one a little differently.
> 
> >>
> 
> >>>    */
> 
> >>
> 
> >>> #ifdef PR_LOGGING
> 
> >>
> 
> >>> #define DOM_TEST_LOGR( ... )                                  \
> 
> >>
> 
> >>>     do {                                                          \
> 
> >>
> 
> >>>       if (gTESTLog) {                                           \
> 
> >>
> 
> >>>         DOM_TEST_LOG( DOM_TEST_LOG_REFERENCES, __VA_ARGS__ ); \
> 
> >>
> 
> >>>       }                                                           \
> 
> >>
> 
> >>>     } while (0)
> 
> >>
> 
> >>> #else
> 
> >>
> 
> >>> #define DOM_TEST_LOGR( ... )
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>> #define DOM_TEST_LOGT( ... )      DOM_TEST_LOG( DOM_TEST_LOG_TRACE, 
> >>> __VA_ARGS__ )
> 
> >>
> 
> >>> #define DOM_TEST_LOGI( ... )      DOM_TEST_LOG( DOM_TEST_LOG_INFO, 
> >>> __VA_ARGS__ )
> 
> >>
> 
> >>> #define DOM_TEST_LOGW( ... )      DOM_TEST_LOG( DOM_TEST_LOG_WARNING, 
> >>> __VA_ARGS__ )
> 
> >>
> 
> >>> #define DOM_TEST_LOGE( ... )      DOM_TEST_LOG( DOM_TEST_LOG_ERROR, 
> >>> __VA_ARGS__ )
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #ifdef PR_LOGGING
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> static inline void nsLogAddRefTEST(const char *file, uint32_t line, void* 
> >>> p, uint32_t count, const char *clazz, uint32_t size)
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>     if (count == 1) {
> 
> >>
> 
> >>>       DOM_TEST_LOGR("++++++++++++++++++++++++++++++++++++++++");
> 
> >>
> 
> >>>     }
> 
> >>
> 
> >>>     DOM_TEST_LOGR("%s:%d : TESTREF-ADD(%s): this=%p, mRefCnt=%d\n", file, 
> >>> line, clazz, p, count);
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> static inline void nsLogReleaseTEST(const char *file, uint32_t line, 
> >>> void* p, uint32_t count, const char *clazz, bool abortOnDelete)
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>     DOM_TEST_LOGR("%s:%d : TESTREF-REL(%s): this=%p, mRefCnt=%d\n", file, 
> >>> line, clazz, p, count);
> 
> >>
> 
> >>>     if (count == 0) {
> 
> >>
> 
> >>>       if (!abortOnDelete) {
> 
> >>
> 
> >>>         DOM_TEST_LOGR("----------------------------------------");
> 
> >>
> 
> >>>       } else {
> 
> >>
> 
> >>>         DOM_TEST_LOGR("---------- ABORTING ON DELETE ----------");
> 
> >>
> 
> >>>         *((uint32_t *)0xdeadbeef) = 0x266230;
> 
> >>
> 
> >>>       }
> 
> >>
> 
> >>>     }
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #ifdef NS_LOG_ADDREF
> 
> >>
> 
> >>> #undef NS_LOG_ADDREF
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>> #ifdef NS_LOG_RELEASE
> 
> >>
> 
> >>> #undef NS_LOG_RELEASE
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #define NS_LOG_ADDREF( p, n, c, s ) nsLogAddRefTEST(__FILE__, __LINE__, 
> >>> (p), (n), (c), (s))
> 
> >>
> 
> >>> #ifdef DOM_TEST_DEBUG_REFS_ABORT_ON_DELETE
> 
> >>
> 
> >>> #define NS_LOG_RELEASE( p, n, c )   nsLogReleaseTEST(__FILE__, __LINE__, 
> >>> (p), (n), (c), DOM_TEST_DEBUG_REFS_ABORT_ON_DELETE)
> 
> >>
> 
> >>> #else
> 
> >>
> 
> >>> #define NS_LOG_RELEASE( p, n, c )   nsLogReleaseTEST(__FILE__, __LINE__, 
> >>> (p), (n), (c), false)
> 
> >>
> 
> >>> #endif
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #endif // PR_LOGGING
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> #endif // DOM_TEST_TESTCOMMON_H
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> 5. TESTManager.js
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>> /* This Source Code Form is subject to the terms of the Mozilla Public
> 
> >>
> 
> >>>    * License, v. 2.0. If a copy of the MPL was not distributed with this 
> >>> file,
> 
> >>
> 
> >>>    * You can obtain one at http://mozilla.org/MPL/2.0/. */
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> "use strict";
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> /* static functions */
> 
> >>
> 
> >>> const DEBUG = true;
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> function debug(aStr) {
> 
> >>
> 
> >>>     if (DEBUG)
> 
> >>
> 
> >>>       dump("TESTManager: " + aStr + "\n");
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = 
> >>> Components;
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> Cu.import("resource://gre/modules/XPCOMUtils.jsm");
> 
> >>
> 
> >>> Cu.import("resource://gre/modules/Services.jsm");
> 
> >>
> 
> >>> Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
> 
> >>
> 
> >>> Cu.import("resource://gre/modules/ObjectWrapper.jsm");
> 
> >>
> 
> >>> Cu.import("resource://gre/modules/ctypes.jsm");
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> const TESTMANAGER_CONTRACTID = "@mozilla.org/testManager;1";
> 
> >>
> 
> >>> const TESTMANAGER_CID        = 
> >>> Components.ID("{4a096156-1bd7-4f69-b7eb-89371ff82eb5}");
> 
> >>
> 
> >>> const nsIDOMMozTESTManager   = Ci.nsIDOMMozTESTManager;
> 
> >>
> 
> >>> const nsIClassInfo          = Ci.nsIClassInfo;
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> let library = ctypes.open("libTEST.so");;
> 
> >>
> 
> >>> let Test_Initialize;
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> var test111 = function(sum) {
> 
> >>
> 
> >>> debug("test111 : " + sum);
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> function TESTManager()
> 
> >>
> 
> >>> {
> 
> >>
> 
> >>>     debug("Constructor");
> 
> >>
> 
> >>> }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> TESTManager.prototype = {
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     __proto__: DOMRequestIpcHelper.prototype,
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     classID : TESTMANAGER_CID,
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     QueryInterface : XPCOMUtils.generateQI([nsIDOMMozTESTManager, 
> >>> Ci.nsIDOMGlobalPropertyInitializer]),
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     classInfo : XPCOMUtils.generateCI({ classID: TESTMANAGER_CID,
> 
> >>
> 
> >>>                                         contractID: 
> >>> TESTMANAGER_CONTRACTID,
> 
> >>
> 
> >>>                                         classDescription: "TESTManager",
> 
> >>
> 
> >>>                                         interfaces: 
> >>> [nsIDOMMozTESTManager],
> 
> >>
> 
> >>>                                         flags: nsIClassInfo.DOM_OBJECT }),
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     TEST_Initialize: function TEST_Initialize(x, y, width, height) {
> 
> >>
> 
> >>>       var that = this;
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>       var com =  Components.classes["@mozilla.org/testManager;1"]
> 
> >>
> 
> >>>                               
> >>> .getService(Components.interfaces.nsIDOMMozTESTManager);
> 
> >>
> 
> >>>       debug(com);
> 
> >>
> 
> >>>       var ret = com.TEST_setJSCallBack(test111);
> 
> >>
> 
> >>>       debug("SetJSCallBack = " + ret);
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> // START ====== TEST Initialize
> 
> >>
> 
> >>>       Test_Initialize = library.declare("Test_Initialize",
> 
> >>
> 
> >>>                               ctypes.default_abi,
> 
> >>
> 
> >>>                               ctypes.int32_t,
> 
> >>
> 
> >>>                               ctypes.int32_t,
> 
> >>
> 
> >>>                               ctypes.int32_t,
> 
> >>
> 
> >>>                               ctypes.int32_t,
> 
> >>
> 
> >>>                               ctypes.int32_t);
> 
> >>
> 
> >>>       debug ("Test_Initialize = " + Test_Initialize);
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>       var result = Test_Initialize(x, y, width, height);
> 
> >>
> 
> >>>       debug ("Test_Initialize : result = " + result);
> 
> >>
> 
> >>> //    return result;
> 
> >>
> 
> >>> // END ====== TEST Initialize
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     },
> 
> >>
> 
> >>>
> 
> >>
> 
> >>>     TEST_setJSCallBack: function TEST_setJSCallBack(aCallback) {
> 
> >>
> 
> >>>       debug("TEST_setJSCallBack 1111 = " + aCallback);
> 
> >>
> 
> >>>     }
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TESTManager])
> 
> >>
> 
> >>>
> 
> >>
> 
> >>> ---------------------------------------------------------------------------------------------
> 
> >>
> 
> >>>

_______________________________________________
dev-b2g mailing list
dev-b2g@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-b2g

Reply via email to