1. 定义Proxy接口(C++)

// MyProxyInterface.h
#ifndef MY_PROXY_INTERFACE_H
#define MY_PROXY_INTERFACE_H
 
class MyProxyInterface {
public:
    virtual ~MyProxyInterface() = default;
    virtual int32_t MyProxyMethod(int32_t param) = 0;
};
 
#endif // MY_PROXY_INTERFACE_H
// MyProxyImpl.cpp
#include "MyProxyInterface.h"
#include <iostream>
 
class MyProxyImpl : public MyProxyInterface {
public:
    int32_t MyProxyMethod(int32_t param) override {
        std::cout << "Proxy method called with param: " << param << std::endl;
        return param * 2; // Just an example, returning param multiplied by 2
    }
};

2. 编写NAPI模块(C++)

// MyNapiModule.cpp
#include <napi.h>
#include "MyProxyInterface.h"
 
// Implement the proxy interface
std::unique_ptr<MyProxyInterface> g_proxyImpl = std::make_unique<MyProxyImpl>();
 
Napi::Value MyProxyMethodWrapper(const Napi::CallbackInfo& info) {
    Napi::Env env = info.Env();
 
    if (info.Length() < 1 || !info[0].IsNumber()) {
        Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException();
        return env.Null();
    }
 
    int32_t param = info[0].As<Napi::Number>().Int32Value();
    int32_t result = g_proxyImpl->MyProxyMethod(param);
 
    return Napi::Number::New(env, result);
}
 
Napi::Object Init(Napi::Env env, Napi::Object exports) {
    exports.Set(Napi::String::New(env, "myProxyMethod"), Napi::Function::New(env, MyProxyMethodWrapper));
    return exports;
}
 
NODE_API_MODULE(MyNapiModule, Init)

3. 编译NAPI模块

C++代码编译成共享库(.so文件)

4. 在JavaScript中调用NAPI模块

// main.js
const MyNapiModule = require('./path/to/your/napi/module');
 
const result = MyNapiModule.myProxyMethod(5);
console.log('Result from proxy method:', result); // Should print: Result from proxy 
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐