cpp call java

好的,简洁地说:
如果后端是 C++,在 VSCode 插件里,也是用 child_process.spawn 启动 C++程序,通过 stdin/stdout 通信,和 Java 非常类似。

只是编译时你需要把 C++ 程序编译成可执行文件(比如 backend)。


1. C++ 后端示例(backend.cpp)

// backend.cpp
#include <iostream>
#include <string>

int main() {
    std::string input;
    while (std::getline(std::cin, input)) {
        std::cout << "C++ received: " << input << std::endl;
    }
    return 0;
}

编译:

g++ backend.cpp -o backend

生成 backend 可执行文件。


2. VSCode 插件 TypeScript 调用 C++

(还是在 extension.ts

import * as vscode from 'vscode';
import { spawn } from 'child_process';

export function activate(context: vscode.ExtensionContext) {
    const backendPath = context.asAbsolutePath('path/to/backend'); // 修改路径
    const cppProcess = spawn(backendPath);

    cppProcess.stdout.on('data', (data) => {
        vscode.window.showInformationMessage(`From C++: ${data.toString()}`);
    });

    cppProcess.stderr.on('data', (data) => {
        console.error(`C++ error: ${data}`);
    });

    cppProcess.on('close', (code) => {
        console.log(`C++ process exited with code ${code}`);
    });

    let disposable = vscode.commands.registerCommand('extension.sendMessage', () => {
        cppProcess.stdin.write('Hello from VSCode!\n');
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {}

小总结


要不要我顺便给你补一个「多轮通信」的小例子?比如 VSCode 连续发多条消息给后端,后端处理后回传?🚀