diff --git a/interfaces/native/node/native_node_napi.cpp b/interfaces/native/node/native_node_napi.cpp index fc301a9aeb71d80c0ce445771c8a5e4c93b91463..3d5d9d86446223fbf2f297651a69cf315c320d7c 100644 --- a/interfaces/native/node/native_node_napi.cpp +++ b/interfaces/native/node/native_node_napi.cpp @@ -28,7 +28,13 @@ int32_t OH_ArkUI_GetNodeHandleFromNapiValue(napi_env env, napi_value value, ArkU { bool hasProperty = false; auto result = napi_has_named_property(env, value, "nodePtr_", &hasProperty); + CHECK_NULL_RETURN(OHOS::Ace::NodeModel::GetFullImpl() || OHOS::Ace::NodeModel::InitialFullImpl(), + ARKUI_ERROR_CODE_CAPI_INIT_ERROR); const auto* impl = OHOS::Ace::NodeModel::GetFullImpl(); + if (!impl && OHOS::Ace::NodeModel::InitialFullImpl()) { + impl = OHOS::Ace::NodeModel::GetFullImpl(); + CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_CAPI_INIT_ERROR); + } if (result == napi_ok && hasProperty) { napi_value frameNodePtr = nullptr; auto result = napi_get_named_property(env, value, "nodePtr_", &frameNodePtr); diff --git a/interfaces/native/node/node_model.cpp b/interfaces/native/node/node_model.cpp index 42aca7d262adf1ff710c896579619b69eb07ae46..a04004e3401313c4a90bf1f69fd0eebf65a1f167 100644 --- a/interfaces/native/node/node_model.cpp +++ b/interfaces/native/node/node_model.cpp @@ -66,6 +66,8 @@ void* FindFunction(void* library, const char* name) #endif ArkUIFullNodeAPI* impl = nullptr; +std::once_flag initImplFlag; +bool initSuccessFlag = false; bool InitialFullNodeImpl(int version) { @@ -110,7 +112,10 @@ ArkUIFullNodeAPI* GetFullImpl() bool InitialFullImpl() { - return InitialFullNodeImpl(ARKUI_NODE_API_VERSION); + std::call_once(initImplFlag, []() { + initSuccessFlag = InitialFullNodeImpl(ARKUI_NODE_API_VERSION); + }); + return initSuccessFlag; } struct InnerEventExtraParam {