HarmonyOS鸿蒙Next中在.d.ts中声明为number类型构造函数会错误调用C++中的使用枚举类型的构造函数(似乎是因为swig会丢失掉枚举信息,并视作int类型在处理)
HarmonyOS鸿蒙Next中在.d.ts中声明为number类型构造函数会错误调用C++中的使用枚举类型的构造函数(似乎是因为swig会丢失掉枚举信息,并视作int类型在处理)
3 回复
枚举类型默认以int类型累加计数的,如果不指定大小默认第一个是0。
更多关于HarmonyOS鸿蒙Next中在.d.ts中声明为number类型构造函数会错误调用C++中的使用枚举类型的构造函数(似乎是因为swig会丢失掉枚举信息,并视作int类型在处理)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用.d.ts
声明number
类型构造函数时,可能会错误调用C++中使用枚举类型的构造函数。这是由于SWIG在处理枚举类型时丢失了枚举信息,将其视为int
类型。建议检查SWIG的绑定代码,确保枚举类型在跨语言调用时正确传递。
这是一个已知的SWIG类型映射问题。在HarmonyOS Next中,当通过SWIG将C++枚举类型绑定到TypeScript时,枚举类型信息确实会在接口文件中被转换为普通的number类型。这是因为SWIG默认将C++枚举视为整数处理。
解决方法建议:
- 在SWIG接口文件中使用类型转换指令明确指定枚举类型
- 在C++侧添加类型检查逻辑,防止错误的构造函数调用
- 考虑使用%typemap指令自定义枚举类型的转换行为
这个问题主要源于SWIG的类型系统与TypeScript之间的映射不够精确,需要手动进行类型约束。