У меня есть некоторый код привязки 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
Как зарегистрировать логический тип при составлении привязки TypeScript с помощью Emscripten? ⇐ Javascript
Форум по Javascript
1747424508
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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79625841/how-to-register-a-boolean-type-when-compiling-typescript-bindings-with-emscripte[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия