webidl binder demo
依旧是惯例
See the Pen Aurora Borealis by 攻伤菊菊长 (@THISISAGOODNAME) on CodePen.
前天写了篇webidl相关的文章,觉得写得不够清楚,这次写一个完整实例
创建Bar class
在c++代码中创建Bar类
//
//Bar.h
//
#ifndef CLASS_BAR_H
#define CLASS_BAR_H
class Bar {
public:
Bar(long val);
int doSomething();
int addSum(int a, int b);
};
#endif //CLASS_BAR_H
//
//Bar.cpp
//
#include "Bar.h"
Bar::Bar(long val) {
}
int Bar::doSomething() {
return 233;
}
int Bar::addSum(int a, int b) {
return a+b;
}
创建IDL文件
创建一个IDL文件,文件名任意,我以my_classes.idl为例
interface Bar {
void Bar(long val);
long doSomething();
long addSum(long a, long b);
};
编译idl文件生成胶水文件
运行tools/webidl_binder.py脚本
python $EMSCRIPTEN/tools/webidl_binder.py my_classes.idl glue
$EMSCRIPTEN指emscripten的根目录
运行完webidl_binder.py脚本之后,文件夹下会生成glue.cpp和glue.js两个文件
创建一个文件包含glue.cpp
创建一个cpp文件,文件名任意,我以my_glue_wrapper.cpp为例
在该文件中包含glue.cpp和项目的头文件,比如在本例中,my_glue_wrapper.cpp的内容应该为
//
//my_glue_wrapper.cpp
//
#include "Bar.h"
#include "glue.cpp"
编译项目
编译工程,记得添加my_glue_wrapper.cpp和glue.js
emcc Bar.cpp my_glue_wrapper.cpp --post-js glue.js -o output.js
测试
创建一个html文件,记得包含output.js
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>webidl test</title>
<script src="output.js"></script>
</head>
<body>
请打开开发者工具来进行测试
</body>
</html>
之后,可以和在向JS对象相同的方法来使用编译的C++对象