如果你不想使用EM_ASM宏来直接在C++中嵌入JavaScript代码,你可以通过Emscripten提供的绑定机制来调用JavaScript库。以下是一个示例:
假设有一个名为math.js的JavaScript库,其中包含了两个函数:add()和multiply()。
// math.js
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
现在,在C++中调用这些函数,而不使用EM_ASM宏。首先,创建一个名为main.cpp的C++文件,并写入以下内容:
#include <emscripten.h>
#include <emscripten/bind.h>
using namespace emscripten;
// 定义一个绑定类,用于导出 JavaScript 函数
class MathLibrary {
public:
static int add(int a, int b) {
// 使用 EM_ASM_INT 调用 JavaScript 的 add() 函数
return EM_ASM_INT({
return add($0, $1);
}, a, b);
}
static int multiply(int a, int b) {
// 使用 EM_ASM_INT 调用 JavaScript 的 multiply() 函数
return EM_ASM_INT({
return multiply($0, $1);
}, a, b);
}
};
EMSCRIPTEN_BINDINGS(math_library) {
class_<MathLibrary>("MathLibrary")
.class_function("add", &MathLibrary::add)
.class_function("multiply", &MathLibrary::multiply);
}
int main() {
// 在 C++ 中调用 JavaScript 函数
int result = MathLibrary::add(2, 3);
printf("Addition result: %d\n", result);
result = MathLibrary::multiply(4, 5);
printf("Multiplication result: %d\n", result);
return 0;
}
接下来,在终端中使用以下命令进行编译:
em++ main.cpp -o main.js --bind
这将生成一个名为main.js的JavaScript文件。现在,你可以将生成的文件引入到HTML页面中,并查看浏览器控制台输出。
<!DOCTYPE html>
<html>
<head>
<title>Emscripten Example</title>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
当你打开此HTML页面时,在浏览器控制台中应该会看到以下输出:
Addition result: 5
Multiplication result: 20
通过Emscripten的绑定机制,你可以定义一个C++类(如上面示例中的MathLibrary),并在其中导出JavaScript函数。然后,在C++代码中通过调用导出的函数来间接调用JavaScript库中的函数,实现C++和JavaScript之间的交互。
内容由零声教学AI助手提供,问题来源于学员提问




