2016-03-25 1 views
0

Мы пишем, чтобы спросить, как правильно вызвать метод родного модуля Titanium Appelerator. Наша среда разработки заключается в следующем:Как вызвать метод, добавленный в собственный модуль Windows платформы Appelerator

Titanium SDK: 5.2.0
Appcelerator CLI: 5.2.0
TabletPC: Windows10pro

Наш модуль был разработан со следующими процедурами ;

(1) мы создали модуль, относящийся к документу https://github.com/appcelerator/titanium_mobile_windows#module-development В модуль был добавлен дополнительный метод aaa().

cd MY_WORKSPACE 
ti create -p windows -t module //create a module project 
cd MY_MODULE_NAME/windows 
ti build -p windows -T ws-local //build my module project 

(2) приложение под управлением Windows’ было создано для вызова выше модуля, и не было никакой ошибки в то время как мы называем модуль из приложения. Однако, хотя мы вызываем метод aaa(), сообщение об ошибке Titanium, как это произошло; «Метод aaa() не существует».

В платформе Windows Titanium для windows10, dll для модуля была создана правильно. Тогда нам просто интересно, какие части нашего источника неверны;

(1) Определение метода aaa() неверно. (2) Исходный код для вызова собственного модуля неверен. (3) Исходный код для вызова метода aaa() неверен.

Мы приложили наш исходный код к следующему и заблаговременно за ваш комментарий и совет.

Код выглядит следующим образом.

окна/SRC/JpNativeModuleExample.cpp

#include "JpNativeModuleExample.hpp" 
#include "Titanium/detail/TiImpl.hpp" 

namespace Jp 
{ 
     NativeModuleExample::NativeModuleExample(const JSContext& js_context) TITANIUM_NOEXCEPT 
       : JSExportObject(js_context) 
     { 
       TITANIUM_LOG_DEBUG("NativeModuleExample::ctor Initialize"); 
     } 

     void NativeModuleExample::postInitialize(JSObject& js_object) 
     { 
     } 

     void NativeModuleExample::postCallAsConstructor(const JSContext& js_context, const std::vector<JSValue>& arguments) 
     { 
     } 

     //add new method 
     void NativeModuleExample::aaa() TITANIUM_NOEXCEPT 
     { 
     } 

     void NativeModuleExample::JSExportInitialize() 
     { 
       JSExport<NativeModuleExample>::SetClassVersion(1); 
       JSExport<NativeModuleExample>::SetParent(JSExport<JSExportObject>::Class()); 
     } 
} 

окна/включить/JpNativeModuleExample.hpp

#ifndef _JPNATIVEMODULEEXAMPLE_HPP_ 
#define _JPNATIVEMODULEEXAMPLE_HPP_ 

#include "JpNativeModuleExample_EXPORT.h" 
#include "Titanium/detail/TiBase.hpp" 
#include "Titanium/Module.hpp" 

namespace Jp 
{ 
     using namespace HAL; 

     class JPNATIVEMODULEEXAMPLE_EXPORT NativeModuleExample : public JSExportObject, public JSExport<NativeModuleExample> 
     { 
       public: 
         NativeModuleExample(const JSContext&) TITANIUM_NOEXCEPT; 
         void aaa() TITANIUM_NOEXCEPT; 
         virtual void postInitialize(JSObject& js_object) override; 
         virtual void postCallAsConstructor(const JSContext& js_context, const std::vector<JSValue>& arguments) override; 

         virtual void aaa();  //add new method 

         virtual ~NativeModuleExample()        = default; 
         NativeModuleExample(const NativeModuleExample&)   = default; 
         NativeModuleExample& operator=(const NativeModuleExample&) = default; 
#ifdef TITANIUM_MOVE_CTOR_AND_ASSIGN_DEFAULT_ENABLE 
         NativeModuleExample(NativeModuleExample&&)     = default; 
         NativeModuleExample& operator=(NativeModuleExample&&)  = default; 
#endif 

         static void JSExportInitialize(); 

     }; 
} 
#endif // _JPNATIVEMODULEEXAMPLE_HPP_ 

образец кода

var nativemoduleexample = require('jp.NativeModuleExample'); 
Ti.API.info("module is => " + nativemoduleexample); //no problem 
var aaa = nativemoduleexample.aaa(); //titanium error is displayed 

$.index.open(); 

ответ

1

Для того, чтобы включить вашу функцию, вам нужно для регистрации, используя TITANIUM_ADD_FUNCTION по адресу JSExportInitialize(). Вы можете проверить рабочие примеры в разделе TitaniumKit, такие как Ti.UI.Button и Ti.UI.Window.

void NativeModuleExample::JSExportInitialize() 
{ 
    JSExport<NativeModuleExample>::SetClassVersion(1); 
    JSExport<NativeModuleExample>::SetParent(JSExport<JSExportObject>::Class()); 
    TITANIUM_ADD_FUNCTION(NativeModuleExample, aaa); 
} 

И затем использовать TITANIUM_FUNCION определить функцию, как это ...

TITANIUM_FUNCTION(NativeModuleExample, aaa) 
{ 
    aaa(); 
    return get_context().CreateUndefined() 
}