c++使用quickjs执行JavaScript

c++使用quickjs执行JavaScript

环境 windows10 + clion 2024.x + MinGWx32 + quickjspp(2025-12-06)

直接使用官方的quickjs在windows系统坑比较多,所以使用 https://github.com/ftk/quickjspp 它是 QuickJS 的 c++ 包装

开始

下载 quickjspp 的源码直接使用 clion 2024.x打开 quickjspp-master,然后创建一个 main.cpp

c 复制代码
#include "quickjspp.hpp"
#include <iostream>

class MyClass
{
public:
    MyClass() {}
    MyClass(std::vector<int>) {}

    double member_variable = 5.5;
    std::string member_function(const std::string& s) { return "Hello, " + s; }
};

void println(qjs::rest<std::string> args) {
    for (auto const & arg : args) std::cout << arg << " ";
    std::cout << "\n";
}

int main()
{
    qjs::Runtime runtime;
    qjs::Context context(runtime);
    try
    {
        // export classes as a module
        auto& module = context.addModule("MyModule");
        module.function<&println>("println");
        module.class_<MyClass>("MyClass")
                .constructor<>()
                .constructor<std::vector<int>>("MyClassA")
                .fun<&MyClass::member_variable>("member_variable")
                .fun<&MyClass::member_function>("member_function");
        // import module
        context.eval(R"xxx(
            import * as my from 'MyModule';
            globalThis.my = my;
        )xxx", "<import>", JS_EVAL_TYPE_MODULE);
        // evaluate js code
        context.eval(R"xxx(
            let v1 = new my.MyClass();
            v1.member_variable = 1;
            let v2 = new my.MyClassA([1,2,3]);
            function my_callback(str) {
              my.println("at callback:", v2.member_function(str));
            }
        )xxx");

        // callback
        auto cb = (std::function<void(const std::string&)>) context.eval("my_callback");
        cb("world");
    }
    catch(qjs::exception)
    {
        auto exc = context.getException();
        std::cerr << (std::string) exc << std::endl;
        if((bool) exc["stack"])
            std::cerr << (std::string) exc["stack"] << std::endl;
        return 1;
    }
}

修改 CMakeLists.txt 将执行指向 main

c 复制代码
# add_executable(qjs qjs.cpp)
# 改为我们的 main.cpp
add_executable(qjs main.cpp)

Reload CMake Project 后直接起动 main即可

出自:https://lingkang.top/archives/c-use-quickjs-exec-js

afcdc0dc-6d7d-47bc-8847-0b3e1c3c588a

相关推荐
killerbasd1 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
Ricky_Theseus1 小时前
C++右值引用
java·开发语言·c++
吴梓穆1 小时前
UE5 c++ 常用方法
java·c++·ue5
云栖梦泽1 小时前
Linux内核与驱动:9.Linux 驱动 API 封装
linux·c++
Morwit2 小时前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
橘子编程2 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
SpiderPex2 小时前
第十七届蓝桥杯 C++ B组-题目 (最新出炉 )
c++·职场和发展·蓝桥杯
炘爚2 小时前
C++ 右值引用与程序优化
开发语言·c++
叫我一声阿雷吧2 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰3 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js