Мы пишем, чтобы спросить, как правильно вызвать метод родного модуля 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();