From d89afb682ed191a62c1ad489c086f5b369de16e9 Mon Sep 17 00:00:00 2001 From: zoulinken Date: Tue, 27 May 2025 22:33:35 +0800 Subject: [PATCH] =?UTF-8?q?C-API=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zoulinken --- interfaces/native/node/native_node_napi.cpp | 6 ++++++ interfaces/native/node/node_model.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/interfaces/native/node/native_node_napi.cpp b/interfaces/native/node/native_node_napi.cpp index fc301a9aeb7..3d5d9d86446 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 42aca7d262a..a04004e3401 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 { -- Gitee