HarmonyOS鸿蒙Next中napi_call_function调用CanvasRenderingContext2D的方法为什么会发生崩溃呢

HarmonyOS鸿蒙Next中napi_call_function调用CanvasRenderingContext2D的方法为什么会发生崩溃呢

ArkTS:

private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);

XTest(this.context);

c++:

napi_value Test::XTest(napi_env env, napi_callback_info info)
{
    napi_value result = nullptr;
    napi_get_undefined(env, &result);

    size_t argc = 1;
    napi_value argv[1] = {nullptr};

    napi_value thisVar = nullptr;
    void* data = nullptr;

    if (napi_get_cb_info(env, info, &argc, argv, &thisVar, &data)) {
        return result;
    }
    
    napi_valuetype valueType = napi_undefined;
    napi_typeof(env, argv[0], &valueType);

    if (valueType != napi_object) return result;

    valueType = napi_undefined;
    napi_typeof(env, argv[0], &valueType);

    if (valueType != napi_object) return result;
    
    
    std::string cArr = "fillText";
    napi_value key;
    napi_status ok = napi_create_string_utf8(env, cArr.c_str(), cArr.length(), &key);
    if(ok != napi_ok) return result;

    napi_value callback = nullptr;
    ok = napi_get_property(env, argv[0], key, &callback);
    napi_typeof(env, callback, &valueType);
    if (valueType != napi_function) return result;
    
    
    napi_value xdata[4] = {nullptr};
    
//      this.context.fillText("Hello World!", 50, 100, 200);    
    
    std::string text = "Hello World!";
    ok = napi_create_string_utf8(env, text.c_str(), text.length(), &xdata[0]);
    if(ok != napi_ok) return result;

    ok = napi_create_int32(env, 50, &xdata[1]);
    if(ok != napi_ok) return result;

    ok = napi_create_int32(env, 100, &xdata[2]);
    if(ok != napi_ok) return result;

    ok = napi_create_int32(env, 200, &xdata[3]);
    if(ok != napi_ok) return result;

    napi_value res;
    ok = napi_call_function(env, nullptr, callback, 4, xdata, &res);

    if(ok != napi_ok) return result;

    return result;
}

更多关于HarmonyOS鸿蒙Next中napi_call_function调用CanvasRenderingContext2D的方法为什么会发生崩溃呢的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

已解决

更多关于HarmonyOS鸿蒙Next中napi_call_function调用CanvasRenderingContext2D的方法为什么会发生崩溃呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,napi_call_function调用CanvasRenderingContext2D方法时发生崩溃,可能原因包括:

  1. 参数传递错误,如类型不匹配或数量不符;
  2. CanvasRenderingContext2D对象未正确初始化或已被释放;
  3. 线程安全问题,如在非UI线程调用UI相关方法;
  4. NAPI接口实现存在缺陷或与鸿蒙系统不兼容。

建议检查参数、对象状态及线程环境,并确保使用最新版本的SDK和API。

回到顶部