Как зарегистрировать логический тип при составлении привязки TypeScript с помощью Emscripten?Javascript

Форум по Javascript
Ответить
Anonymous
 Как зарегистрировать логический тип при составлении привязки TypeScript с помощью Emscripten?

Сообщение Anonymous »

У меня есть некоторый код привязки Emscripten (автономный, тривиальный пример которого показан ниже), который преобразует мой класс C ++ status_t return-value в логический код JavaScript может эффективно иметь дело. (т.е. статус_t Представление условия ошибки преобразуется в JavaScript-false, в то время как status_t представление успеха преобразуется в JavaScript-true)
Это отлично работает при составлении кода с Javascript, но когда я пытаюсь скомпилировать код в типовой Способ, который похож на то, как это работает для привязки JavaScript, или мне просто не повезло? < /p>
// Works great to generate JavaScript bindings:
// emcc -lembind -sEXPORTED_RUNTIME_METHODS=ccall,cwrap -sWASM_BIGINT -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME="CPPBindings" -sENVIRONMENT=web -lembind -std=c++17 typescript_status_t_binding_problem.cpp -o output_bindings.js

// Doesn't work to generate TypeScript bindings ("Error: Missing primitive type to TS type for 'status_t'")
// emcc -lembind -sEXPORTED_RUNTIME_METHODS=ccall,cwrap -sWASM_BIGINT -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME="CPPBindings" -sENVIRONMENT=web -lembind -std=c++17 typescript_status_t_binding_problem.cpp --emit-tsd output_bindings.d.ts

#include
#include

using namespace emscripten;

class status_t
{
public:
status_t() : _errStr(NULL) {/* empty */}
status_t(const char * errStr) : _errStr(errStr) {/* empty */}

bool IsOK() const {return (_errStr == NULL);}
bool IsError() const {return (_errStr != NULL);}

const char * GetErrorString() const {return _errStr;}

private:
const char * _errStr;
};

// Tell embind how to convert status_t JavaScript bool
template struct internal::BindingType
{
using WireType = bool;
static WireType toWireType(status_t s, rvp::default_tag)
{
if (s.IsOK()) return true;
else return false;
}
static status_t fromWireType(WireType v) {return v ? status_t() : status_t("Error");}
};
EMSCRIPTEN_BINDINGS(status_t)
{
internal::_embind_register_bool(internal::TypeID::get(), "status_t", true, false);
}

class SomeExampleClass
{
public:
SomeExampleClass() {/* empty */}

status_t DoSomething() {return status_t();}
status_t EpicFail() {return status_t("epic fail!");}
};

EMSCRIPTEN_BINDINGS(SomeExampleClass)
{
class_("SomeExampleClass")
.constructor()
.function("DoSomething", &SomeExampleClass::DoSomething)
.function("EpicFail", &SomeExampleClass::EpicFail);
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... -emscripte
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»