尝试下如下方案https://gitee.com/openharmony-sig/aki代码参考://1.TypeScript 接口定义: // types.ts export interface MyInterface { notify(message: string): void; } //2.将 TypeScript 接口传递给 C++: // index.ts import { MyInterface } from ‘./types’; const ffi = require(‘ffi-napi’); const myLibrary = ffi.Library(‘path/to/myCppLibrary’, { ‘callNotify’: [‘void’, [‘pointer’, ‘string’]] }); const myInterface: MyInterface = { notify: (message: string) => { myLibrary.callNotify(null, message); } }; export { myInterface }; //3.C++ 调用 TypeScript 方法 // myCppLibrary.cpp extern “C” { typedef void(notifyFunc)(const char); void callNotify(notifyFunc func, const char* message) { // 这里是调用 TypeScript 方法的逻辑 if (func != nullptr) { func(message); } } }可以用函数指针数组的方式来处理这种情况 不需要传递大量单独的函数指针先在 TypeScript 中定义一个包含多个方法的接口和相应的实现类// MyNativeModule.ts declare function nativeRegisterCallback(callback: number): void; interface MyCallback { method1(): void; method2(): void; // 定义更多方法… } class MyCallbackImpl implements MyCallback { method1(): void { console.log(“Method 1 called”); } method2(): void { console.log(“Method 2 called”); } // 实现更多方法… } const callbackImpl = new MyCallbackImpl(); nativeRegisterCallback(callbackImpl);然后在 C++ 中使用函数指针数组来处理多个方法的回调// MyCallback.h #ifndef MYCALLBACK_H #define MYCALLBACK_H class MyCallback { public: virtual void method1() = 0; virtual void method2() = 0; // 声明更多方法… }; typedef void (*MethodCallback)(); class MyCallbackWrapper { public: MethodCallback methods[10]; // 假设有10个方法 void callMethod(int index) { if (methods[index] != nullptr) { methodsindex; } } }; #endif // MYCALLBACK_H / MyNativeModule.cpp #include “MyCallback.h” MyCallbackWrapper* globalCallback = nullptr; extern “C” { JNIEXPORT void JNICALL Java_com_example_MyNativeModule_registerCallback(JNIEnv env, jobject thiz, jlong nativePtr) { globalCallback = reinterpret_cast<MyCallbackWrapper>(nativePtr); } JNIEXPORT void JNICALL Java_com_example_MyNativeModule_callMethod(JNIEnv *env, jobject thiz, jint index) { if (globalCallback != nullptr) { globalCallback->callMethod(index); } } } // extern “C”通过 MyCallbackWrapper 类和 methods 数组来存储多个方法的函数指针。在 callMethod 方法中,根据传入的索引调用对应的方法
尝试下如下方案
https://gitee.com/openharmony-sig/aki
代码参考:
可以用函数指针数组的方式来处理这种情况 不需要传递大量单独的函数指针
先在 TypeScript 中定义一个包含多个方法的接口和相应的实现类
然后在 C++ 中使用函数指针数组来处理多个方法的回调
通过 MyCallbackWrapper 类和 methods 数组来存储多个方法的函数指针。在 callMethod 方法中,根据传入的索引调用对应的方法