HarmonyOS:Node-API實現跨語言互動(2)Node-API支援的資料型別和介面

为敢技术發表於2024-10-26

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤部落格園地址:為敢技術(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18502733
➤如果連結不是為敢技術的部落格園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點選原文地址閱讀!支援作者!支援原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Node-API的資料型別

napi_status

是一個列舉資料型別,表示Node-API介面返回的狀態資訊。

每當呼叫一個Node-API函式,都會返回該值,表示操作成功與否的相關資訊。

typedef enum {
    napi_ok,
    napi_invalid_arg,
    napi_object_expected,
    napi_string_expected,
    napi_name_expected,
    napi_function_expected,
    napi_number_expected,
    napi_boolean_expected,
    napi_array_expected,
    napi_generic_failure,
    napi_pending_exception,
    napi_cancelled,
    napi_escape_called_twice,
    napi_handle_scope_mismatch,
    napi_callback_scope_mismatch,
    napi_queue_full,
    napi_closing,
    napi_bigint_expected,
    napi_date_expected,
    napi_arraybuffer_expected,
    napi_detachable_arraybuffer_expected,
    napi_would_deadlock, /* unused */
    napi_no_external_buffers_allowed,
    napi_cannot_run_js
} napi_status;

napi_extended_error_info

一個結構體,在呼叫函式不成功時儲存了較為詳細的錯誤資訊。

  1. typedef struct {
  2. const char *error_message;
  3. void *engine_reserved;
  4. uint32_t engine_error_code;
  5. napi_status error_code;
  6. } napi_extended_error_info;

napi_value

napi_value是一個C的結構體指標,表示一個JavaScript物件的引用。napi_value持有了JS物件,同時,napi_value受handle_scope管理,scope中napi_value持有的JS物件不會被釋放;出scope後,napi_value將失效,不再持有對應的JS物件。

napi_env

  • 用於表示Node-API執行時的上下文,Native側函式入參,並傳遞給函式中的Node-API介面。

  • napi_env與JS執行緒繫結,JS執行緒退出後,napi_env將失效。

  • 禁止快取napi_env,禁止在不同Worker中傳遞napi_env。

napi_threadsafe_function

napi_threadsafe_function用來建立一個執行緒安全的JavaScript函式,可以在不同的執行緒中呼叫。可以用於將非同步操作的結果傳遞給JavaScript環境,例如從另一個執行緒中讀取資料或執行計算密集型操作。此外,它還可以用於從JavaScript環境中呼叫C++程式碼中的函式,以便在另一個執行緒中執行。透過使用napi_threadsafe_function,可以實現JavaScript和C++之間的高效通訊,同時保持執行緒安全性。

napi_threadsafe_function_release_mode

該列舉型別定義了兩個常量,用於指定在何時釋放執行緒安全函式的回撥函式。

  1. typedef enum {
  2. napi_tsfn_release,
  3. napi_tsfn_abort
  4. } napi_threadsafe_function_release_mode;

該值會傳給napi_release_threadsafe_function。

  1. napi_release_threadsafe_function(napi_threadsafe_function func,
  2. napi_threadsafe_function_release_mode mode);
  • mode值為napi_tsfn_release時:表示當前執行緒不再呼叫此tsfn。

  • mode值為napi_tsfn_abort時:表示除了當前執行緒,其他執行緒不能再呼叫此tsfn。

    如果設定為napi_tsfn_abort,利用napi_call_threadsafe_function介面呼叫此tsfn時將返回napi_closing,tsfn函式並不會被放入queue中。

napi_threadsafe_function_call_mode

該列舉型別定義了兩個常量,用於指定執行緒安全函式的呼叫模式。

資料結構如下所示:

  1. typedef enum {
  2. napi_tsfn_nonblocking,
  3. napi_tsfn_blocking
  4. } napi_threadsafe_function_call_mode;
  • napi_tsfn_nonblocking:napi_call_threadsafe_function是非阻塞的,如果佇列已滿,則返回napi_queue_full,從而阻止資料新增到佇列中。

  • napi_tsfn_blocking:napi_call_threadsafe_function是阻塞的,直至佇列中有空間可用。

記憶體管理型別

Node-API包含以下記憶體管理型別:

napi_handle_scope

napi_handle_scope資料型別是用來管理JavaScript物件的生命週期的。它允許JavaScript物件在一定範圍內保持活動狀態,以便在JavaScript程式碼中使用。在建立napi_handle_scope時,所有在該範圍內建立的JavaScript物件都會保持活動狀態,直到結束。這樣可以避免在JavaScript程式碼中使用已經被釋放的物件,從而提高程式碼的可靠性和效能。

napi_escapable_handle_scope

  • 由napi_open_escapable_handle_scope介面建立,由napi_close_escapable_handle_scope介面關閉。

  • 表示一種特殊型別的控制代碼範圍,用於將在escapable_handle_scope範圍內建立的值返回給父scope。

  • 用於napi_escape_handle介面,將escape_handle_scope提升到JS物件,以便在外部作用域使用。

napi_ref

指向napi_value,允許使用者管理JavaScript值的生命週期。

napi_type_tag

該結構體定義了一個包含兩個無符號64位整數的型別標籤,用於標識一個Node-API值的型別資訊。

  1. typedef struct {
  2. uint64_t lower;
  3. uint64_t upper;
  4. } napi_type_tag;
  • 儲存了兩個無符號64位整數的128位值,用它來標記JavaScript物件,確保它們屬於某種型別。

  • 比napi_instanceof更強的型別檢查,如果物件的原型被操縱,napi_instanceof可能會報告誤報。

  • type_tag與napi_wrap結合非常有用,因為它確保從包裝物件檢索的指標可以安全地轉換為與先前應用於JavaScript物件的型別標記相對應的Native型別。

napi_async_cleanup_hook_handle

napi_async_cleanup_hook_handle用於註冊非同步操作的回撥函式。它主要用於在非同步操作完成或被取消時執行清理操作,例如釋放資源或撤銷操作。使用napi_async_cleanup_hook_handle可以確保在非同步操作完成或被取消時,相關資源得到正確的釋放和清理,從而避免記憶體洩漏等問題。

回撥型別

Node-API包含以下回撥型別:

napi_callback_info

Native側獲取JS側引數資訊,傳遞給napi_get_cb_info,用於獲取JS側入參資訊。

napi_callback

表示使用者定義的Native函式,暴露給JavaScript,即JS側呼叫的介面;一般不在此callback中建立handle或者callback scope。

基本用法如下:

  1. typedef napi_value (*napi_callback)(napi_env, napi_callback_info);

napi_finalize

函式指標,用於傳入napi_create_threadsafe_function和napi_set_instance_data介面。napi_finalize在物件被回收時會被呼叫。

napi_async_execute_callback

函式指標,用於napi_create_async_work介面。

  • 非同步執行的Native函式,從工作池執行緒呼叫,可與主事件迴圈執行緒並行執行。

  • 函式實現中必須避免執行JavaScript或與JavaScript物件互動的Node-API呼叫。

  • Node-API呼叫可以在napi_async_complete_callback中執行。

napi_async_complete_callback

napi_async_complete_callback用於非同步操作完成後的回撥。當需要進行非同步操作時,可以使用napi_create_async_work函式建立一個非同步操作任務,並指定一個napi_async_complete_callback回撥函式,在非同步操作完成後會自動呼叫該回撥函式,以便進行後續的處理。該回撥函式的引數包括當前非同步操作任務的狀態和返回值等資訊,可以根據這些資訊進行相應的處理。

napi_threadsafe_function_call_js

函式指標,在主執行緒中與獨立執行緒中的JavaScript程式碼進行互動,從而實現更加複雜的功能,用於napi_create_threadsafe_function(napi_env env,…,napi_threadsafe_function_call_js call_js_cb,...)介面。

napi_cleanup_hook

函式指標,用於napi_add_env_cleanup_hook介面,當環境銷燬時會被執行。

napi_async_cleanup_hook

函式指標,用於napi_add_async_cleanup_hook介面,當環境銷燬時會被執行。

排程優先順序

QoS決定了執行緒排程的優先順序,等級定義如下:

  1. typedef enum {
  2. napi_qos_background = 0,
  3. napi_qos_utility = 1,
  4. napi_qos_default = 2,
  5. napi_qos_user_initiated = 3,
  6. } napi_qos_t;
QoS等級適用場景
napi_qos_background 低等級,使用者不可見任務,例如資料同步、備份。
napi_qos_utility 中低等級,不需要立即看到響應效果的任務,例如下載或匯入資料。
napi_qos_default 預設。
napi_qos_user_initiated 高等級,使用者觸發並且可見進展,例如開啟文件。

事件迴圈模式

napi提供了執行底層事件迴圈的兩種模式, 其定義如下:

  1. typedef enum {
  2. napi_event_mode_default = 0,
  3. napi_event_mode_nowait = 1,
  4. } napi_event_mode;
事件迴圈執行模式解釋說明
napi_event_mode_default 阻塞式的執行底層事件迴圈,直到迴圈中沒有任何任務時退出事件迴圈。
napi_event_mode_nowait 非阻塞式的執行底層事件迴圈,嘗試去處理一個任務,處理完之後退出事件迴圈;如果事件迴圈中沒有任務,立刻退出事件迴圈。

執行緒安全任務優先順序

napi提供了執行緒安全任務的優先順序, 底層任務佇列中的任務會根據其優先順序被依次執行, 優先順序的定義如下:

  1. typedef enum {
  2. napi_priority_immediate = 0,
  3. napi_priority_high = 1,
  4. napi_priority_low = 2,
  5. napi_priority_idle = 3,
  6. } napi_task_priority;
任務優先順序解釋說明
napi_priority_immediate 該優先順序的級別最高。
napi_priority_high 該優先順序的級別低於napi_priority_immediate。
napi_priority_low 該優先順序的級別低於napi_priority_immediate和napi_priority_high。
napi_priority_idle 該優先順序的級別最低。

支援的Node-API介面

Node-API介面在Node.js提供的原生模組基礎上擴充套件,目前支援部分介面,具體可見下文。

非同步安全執行緒相關

介面功能說明
napi_create_threadsafe_function 建立執行緒安全函式。
napi_get_threadsafe_function_context 獲取執行緒安全函式中的context。
napi_call_threadsafe_function 呼叫執行緒安全函式。
napi_acquire_threadsafe_function 指示執行緒安全函式可以開始使用。
napi_release_threadsafe_function 指示執行緒安全函式將停止使用。
napi_ref_threadsafe_function 指示在主執行緒上執行的事件迴圈線上程安全函式被銷燬之前不應退出。
napi_unref_threadsafe_function 指示在主執行緒上執行的事件迴圈可能會線上程安全函式被銷燬之前退出。

buffer相關

介面功能說明
napi_create_buffer 建立並獲取一個指定大小的JS Buffer。
napi_create_buffer_copy 建立並獲取一個指定大小的JS Buffer,並以給定資料進行初始化。
napi_create_external_buffer 建立並獲取一個指定大小的JS Buffer,並以給定資料進行初始化,該介面可為Buffer附帶額外資料。
napi_get_buffer_info 獲取JS Buffer底層data及其長度。
napi_is_buffer 判斷給定JS value是否為Buffer物件。
napi_create_external_arraybuffer 分配一個附加有外部資料的JS ArrayBuffer。

string相關

介面功能說明
napi_create_string_utf16 透過UTF16編碼的C字串資料建立JS String。
napi_get_value_string_utf16 獲取給定JS vaule對應的UTF16編碼的字串。
napi_create_string_latin1 透過ISO-8859-1編碼的C字串資料建立JS String。
napi_create_string_utf8 透過UTF8編碼的C字串資料建立JS String。
napi_get_value_string_latin1 獲取給定JS vaule對應的ISO-8859-1編碼的字串。
napi_get_value_string_utf8 獲取給定JS vaule對應的UTF8編碼的字串。

date相關

介面功能說明
napi_create_date 透過一個C的double資料建立JS Date。
napi_get_date_value 獲取給定JS Date對應的C double值。
napi_is_date 判斷給定JS value是否為JS Date物件。

arraybuffer相關

介面功能說明
napi_get_arraybuffer_info 獲取ArrayBuffer的底層data buffer及其長度。
napi_is_arraybuffer 判斷給定JS value是否為ArrayBuffer。
napi_detach_arraybuffer 分離給定ArrayBuffer的底層資料。
napi_is_detached_arraybuffer 判斷給定的ArrayBuffer是否已被分離。
napi_create_arraybuffer 建立並獲取一個指定大小的JS ArrayBuffer。

module相關

介面功能說明
napi_module_register native模組註冊介面。

生命週期相關

介面功能說明
napi_open_handle_scope 建立一個上下文環境使用。需要使用napi_close_handle_scope進行關閉。
napi_close_handle_scope 關閉傳入的上下文環境,關閉後,全部在其中宣告的引用都將被關閉。
napi_open_escapable_handle_scope 建立出一個可逃逸的handle scope,可將範圍內宣告的值返回到父作用域。需要使用napi_close_escapable_handle_scope進行關閉。
napi_close_escapable_handle_scope 關閉傳入的可逃逸的handle scope。
napi_escape_handle 提升傳入的JS Object的生命週期到其父作用域。
napi_create_reference 為Object建立一個reference,以延長其生命週期。呼叫者需要自己管理reference生命週期。
napi_delete_reference 刪除傳入的reference。
napi_reference_ref 增加傳入的reference的引用計數,並獲取新的計數。
napi_reference_unref 減少傳入的reference的引用計數,並獲取新的計數。
napi_get_reference_value 獲取與reference相關聯的JS Object。
napi_add_finalizer 當js Object中的物件被垃圾回收時呼叫註冊的napi_finalize回撥。

promise相關

介面功能說明
napi_create_promise 建立一個promise物件。
napi_resolve_deferred 對promise關聯的deferred物件進行resolve。
napi_reject_deferred 對promise關聯的deferred物件進行reject。
napi_is_promise 判斷給定napi_value是否為promise物件。

array相關

介面功能說明
napi_create_array 建立並獲取一個JS Array。
napi_create_array_with_length 建立並獲取一個指定長度的JS Array。
napi_get_array_length 獲取array的length。
napi_is_array 判斷給定JS value是否為array。
napi_set_element 在給定Object的指定索引處,設定元素。
napi_get_element 獲取給定Object指定索引處的元素。
napi_has_element 若給定Object的指定索引處擁有屬性,獲取該元素。
napi_delete_element 嘗試刪除給定Object的指定索引處的元素。
napi_create_typedarray 透過現有的ArrayBuffer建立一個JS TypeArray。
napi_is_typedarray 判斷給定JS value是否為TypeArray。
napi_get_typedarray_info 獲取給定TypedArray的各種屬性。
napi_create_dataview 透過現有的ArrayBuffer建立一個JS DataView。
napi_is_dataview 判斷給定JS value是否為DataView。
napi_get_dataview_info 獲取給定DataView的各種屬性。

primitive相關

介面功能說明
napi_get_boolean 根據給定的C boolean值,獲取JS Boolean物件。
napi_get_global 獲取global物件。
napi_get_null 獲取null物件。
napi_get_undefined 獲取undefined物件。
napi_coerce_to_bool 將給定的JS value強轉成JS Boolean。
napi_coerce_to_number 將給定的JS value強轉成JS Number。
napi_coerce_to_object 將給定的JS value強轉成JS Object。
napi_coerce_to_string 將給定的JS value強轉成JS String。

class相關

介面功能說明
napi_new_instance 透過給定的建構函式,構建一個例項。
napi_get_new_target 獲取建構函式呼叫的new.target。
napi_define_class 定義與C++類相對應的JavaScript類。
napi_wrap 在ArkTS物件上繫結一個Node-API模組物件例項。這個函式通常在將Node-API模組物件與ArkTS物件進行繫結時使用,以便在ArkTS中使用本地物件的方法和屬性。
napi_unwrap 從ArkTS物件上獲取之前繫結的Node-API模組物件例項。
napi_remove_wrap 從ArkTS物件上獲取之前繫結的Node-API模組物件例項,並解除繫結。

object相關

介面功能說明
napi_get_prototype 獲取給定JS Object的prototype。
napi_create_object 建立一個預設的JS Object。
napi_object_freeze 凍結給定的物件。
napi_object_seal 密封給定的物件。
napi_typeof 獲取給定JS value的JS Type。
napi_instanceof 判斷給定object是否為給定constructor的例項。
napi_type_tag_object 將tag指標的值與Object關聯。
napi_check_object_type_tag 判斷給定的tag指標是否被關聯到了JS Object上。

bigint相關

介面功能說明
napi_create_bigint_int64 透過一個C的int64資料建立JS BigInt。
napi_create_bigint_uint64 透過一個C的uint64資料建立JS BigInt。
napi_create_bigint_words 透過一個C的uint64陣列建立單個JS BigInt。
napi_get_value_bigint_int64 獲取給定JS BigInt對應的C int64值。
napi_get_value_bigint_uint64 獲取給定JS BigInt對應的C uint64值。
napi_get_value_bigint_words 獲取給定JS BigInt對應的資訊,包括符號位、64位小端序陣列和陣列中的元素個數。

異常和錯誤相關

介面功能說明
napi_throw 丟擲一個JS value。
napi_throw_error 用於丟擲一個帶文字資訊的ArkTS Error。
napi_throw_type_error 丟擲一個帶文字資訊的JS TypeError。
napi_throw_range_error 丟擲一個帶文字資訊的JS RangeError。
napi_is_error 判斷napi_value是否表示為一個error物件。
napi_create_error 建立並獲取一個帶文字資訊的JS Error。
napi_create_type_error 建立並獲取一個帶文字資訊的JS TypeError。
napi_create_range_error 建立並獲取一個帶文字資訊的JS RangeError。
napi_get_and_clear_last_exception 獲取並清除最近一次出現的異常。
napi_is_exception_pending 判斷是否出現了異常。
napi_fatal_error 引發致命錯誤以立即終止程序。
napi_get_last_error_info 獲取napi_extended_error_info結構體,其中包含最近一次出現的error資訊。
napi_fatal_exception 丟擲一個致命異常並終止程序, 同時產生相應的crash日誌。

屬性相關

介面功能說明
napi_get_property_names 以字串陣列的形式獲取物件的可列舉屬性的名稱。
napi_set_property 對給定Object設定屬性。
napi_get_property 獲取給定Object的給定屬性。
napi_has_property 判斷給定物件中是否存在給定屬性。
napi_delete_property 嘗試從給定Object中刪除給定key屬性。
napi_has_own_property 判斷給定Object中是否有名為key的own property。
napi_set_named_property 對給定Object設定一個給定名稱的屬性。
napi_get_named_property 獲取給定Object中指定名稱的屬性。
napi_has_named_property 判斷給定Object中是否有給定名稱的屬性。
napi_define_properties 批次的向給定Object中定義屬性。
napi_get_all_property_names 獲取一個陣列,其中包含此物件過濾後的屬性名稱。

非同步任務相關

介面功能說明
napi_create_async_work 建立一個非同步工作物件。
napi_delete_async_work 釋放先前建立的非同步工作物件。
napi_queue_async_work 將非同步工作物件加到佇列,由底層去排程執行。
napi_cancel_async_work 取消入隊的非同步任務。

自定義非同步操作

介面功能說明
napi_async_init 建立一個非同步資源上下文環境(不支援與async_hook相關能力)。
napi_make_callback 在非同步資源上下文環境中回撥JS函式(不支援與async_hook相關能力)。
napi_async_destroy 銷燬先前建立的非同步資源上下文環境(不支援與async_hook相關能力)。
napi_open_callback_scope 建立一個回撥作用域(不支援與async_hook相關能力)。
napi_close_callback_scope 關閉先前建立的回撥作用域(不支援與async_hook相關能力)。

判斷給定的兩個JS value是否嚴格相等

介面功能說明
napi_strict_equals 判斷給定的兩個JS value是否嚴格相等。

uv相關

介面功能說明
napi_get_uv_event_loop 獲取當前libuv loop例項。

函式呼叫

介面功能說明
napi_call_function 在C/C++側呼叫JS方法。
napi_get_cb_info 從給定的callback info中獲取有關呼叫的詳細資訊,如引數和this指標。

擴充套件能力

Node-API元件擴充套件的符號列表

介面功能說明
napi_queue_async_work_with_qos 將非同步工作物件加到佇列,由底層根據傳入的qos優先順序去排程執行。
napi_run_script_path 執行指定abc檔案。
napi_load_module 將abc檔案作為模組載入,返回模組的名稱空間。
napi_load_module_with_info 將abc檔案作為模組載入,返回模組的名稱空間, 可在新建立的ArkTS基礎執行時環境中使用。
napi_create_object_with_properties 使用給定的napi_property_descriptor建立js Object。descriptor的鍵名必須為 string,且不可轉為number。
napi_create_object_with_named_properties 使用給定的napi_value和鍵名建立js Object。鍵名必須為 string,且不可轉為number。
napi_coerce_to_native_binding_object 強制將js Object和Native物件繫結。
napi_create_ark_runtime 建立基礎執行時環境。
napi_destroy_ark_runtime 銷燬基礎執行時環境。
napi_run_event_loop 觸發底層的事件迴圈。
napi_stop_event_loop 停止底層的事件迴圈。
napi_serialize 將ArkTS物件轉換為native資料。
napi_deserialize 將native資料轉為ArkTS物件。
napi_delete_serialization_data 刪除序列化資料。
napi_call_threadsafe_function_with_priority 將指定優先順序和入隊方式的任務投遞到ArkTS主執行緒。
napi_is_sendable 判斷給定JS value是否是Sendable的。
napi_define_sendable_class 建立一個sendable類。
napi_create_sendable_object_with_properties 使用給定的napi_property_descriptor建立一個sendable物件。
napi_create_sendable_array 建立一個sendable陣列。
napi_create_sendable_array_with_length 建立一個指定長度的sendable陣列。
napi_create_sendable_arraybuffer 建立一個sendable ArrayBuffer。
napi_create_sendable_typedarray 建立一個sendable TypedArray。
napi_wrap_sendable 包裹一個native例項到ArkTS物件中。
napi_wrap_sendable_with_size 包裹一個native例項到ArkTS物件中並指定大小。
napi_unwrap_sendable 獲取ArkTS物件包裹的native例項。
napi_remove_wrap_sendable 移除並獲取ArkTS物件包裹的native例項。

napi_queue_async_work_with_qos

  1. napi_status napi_queue_async_work_with_qos(napi_env env,
  2. napi_async_work work,
  3. napi_qos_t qos);

用法同napi_queue_async_work,但可以指定QoS等級。

napi_run_script_path

  1. napi_status napi_run_script_path(napi_env env,
  2. const char* abcPath,
  3. napi_value* result);

napi_load_module

  1. napi_status napi_load_module(napi_env env,
  2. const char* path,
  3. napi_value* result);

napi_create_object_with_properties

  1. napi_status napi_create_object_with_properties(napi_env env,
  2. napi_value* result,
  3. size_t property_count,
  4. const napi_property_descriptor* properties);

napi_create_object_with_named_properties

  1. napi_status napi_create_object_with_named_properties(napi_env env,
  2. napi_value* result,
  3. size_t property_count,
  4. const char** keys,
  5. const napi_value* values);

napi_coerce_to_native_binding_object

  1. napi_status napi_coerce_to_native_binding_object(napi_env env,
  2. napi_value js_object,
  3. napi_native_binding_detach_callback detach_cb,
  4. napi_native_binding_attach_callback attach_cb,
  5. void* native_object,
  6. void* hint);

napi_run_event_loop

  1. napi_status napi_run_event_loop(napi_env env, napi_event_mode mode);

napi_stop_event_loop

  1. napi_status napi_stop_event_loop(napi_env env);

napi_serialize

  1. napi_status napi_serialize(napi_env env,
  2. napi_value object,
  3. napi_value transfer_list,
  4. napi_value clone_list,
  5. void** result);

napi_deserialize

  1. napi_status napi_deserialize(napi_env env, void* buffer, napi_value* object);

napi_delete_serialization_data

  1. napi_status napi_delete_serialization_data(napi_env env, void* buffer);

napi_call_threadsafe_function_with_priority

  1. napi_status napi_call_threadsafe_function_with_priority(napi_threadsafe_function func,
  2. void *data,
  3. napi_task_priority priority,
  4. bool isTail);

napi_is_sendable

  1. napi_status napi_is_sendable(napi_env env, napi_value value, bool* result);

napi_define_sendable_class

  1. napi_status napi_define_sendable_class(napi_env env,
  2. const char* utf8name,
  3. size_t length,
  4. napi_callback constructor,
  5. void* data,
  6. size_t property_count,
  7. const napi_property_descriptor* properties,
  8. napi_value parent,
  9. napi_value* result);

napi_create_sendable_object_with_properties

  1. napi_status napi_create_sendable_object_with_properties(napi_env env,
  2. size_t property_count,
  3. const napi_property_descriptor* properties,
  4. napi_value* result);

napi_create_sendable_array

  1. napi_status napi_create_sendable_array(napi_env env, napi_value* result);

napi_create_sendable_array_with_length

  1. napi_status napi_create_sendable_array_with_length(napi_env env, size_t length, napi_value* result);

napi_create_sendable_arraybuffer

  1. napi_status napi_create_sendable_arraybuffer(napi_env env, size_t byte_length, void** data, napi_value* result);

napi_create_sendable_typedarray

  1. napi_status napi_create_sendable_typedarray(napi_env env,
  2. napi_typedarray_type type,
  3. size_t length,
  4. napi_value arraybuffer,
  5. size_t byte_offset,
  6. napi_value* result);

napi_wrap_sendable

  1. napi_status napi_wrap_sendable(napi_env env,
  2. napi_value js_object,
  3. void* native_object,
  4. napi_finalize finalize_cb,
  5. void* finalize_hint);

napi_wrap_sendable_with_size

  1. napi_status napi_wrap_sendable_with_size(napi_env env,
  2. napi_value js_object,
  3. void* native_object,
  4. napi_finalize finalize_cb,
  5. void* finalize_hint,
  6. size_t native_binding_size);

napi_unwrap_sendable

  1. napi_status napi_unwrap_sendable(napi_env env, napi_value js_object, void** result);

napi_remove_wrap_sendable

  1. napi_status napi_remove_wrap_sendable(napi_env env, napi_value js_object, void** result);

環境生命週期

介面功能說明
napi_set_instance_data 繫結與當前執行的環境相關聯的資料項。
napi_get_instance_data 檢索與當前執行的環境相關聯的資料項。

物件生命週期管理

介面功能說明
napi_add_env_cleanup_hook 註冊環境清理鉤子函式。
napi_remove_env_cleanup_hook 取消環境清理鉤子函式。
napi_add_async_cleanup_hook 註冊清理非同步鉤子函式。
napi_remove_async_cleanup_hook 取消清理非同步鉤子函式。

ArkTS基礎執行時環境

介面功能說明
napi_create_ark_runtime 建立基礎執行時環境
napi_destroy_ark_runtime 銷燬基礎執行時環境

其他實用工具

介面功能說明
node_api_get_module_file_name 用於獲取載入項載入位置的絕對路徑。

相關文章