解析C头文件生成文件
我正在致力于将 GTK+ 移植到 Node.js,其中一个困难是将 GTK+ 函数转换为相应的 C++ 调用。例如,
void gtk_window_set_title (GtkWindow *window,
const gchar *title);
G_CONST_RETURN gchar *gtk_window_get_title (GtkWindow *window);
void gtk_window_set_role (GtkWindow *window,
const gchar *role);
void gtk_window_set_startup_id (GtkWindow *window,
const gchar *startup_id);
G_CONST_RETURN gchar *gtk_window_get_role (GtkWindow *window);
将转换为:
SETTER_METHOD (Window , "setTitle" , gtk_window_set_title , const gchar*) ;
GETTER_METHOD (Window , "getTitle" , gtk_window_get_title , const gchar*) ;
SETTER_METHOD (Window , "setRole" , gtk_window_set_role , const gchar*) ;
SETTER_METHOD (Window , "setStartupId" , gtk_window_set_startup_id , const gchar*) ;
GETTER_METHOD (Window , "getRole" , gtk_window_get_role , const gchar*) ;
因此 1) 我必须在新的宏调用中保留 C 声明的参数(实际上,它们将扩展为模板参数)。 2)必须区分返回某些内容和不返回任何内容的函数,它们将被称为 SETTER_METHOD
或 GETTER_METHOD
,这是因为我无法将它们合并到一个调用中需要部分函数模板专门化。
有没有工具可以实现这一目标?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
node.js 似乎是 V8 Google Chrome 使用的 JavaScript 引擎。您想要创建的是 GTK 的新 javascript 绑定,这应该使用 GObject-introspection 工作来完成,而不是手动绑定每个函数。
看看 Gjs 和 Seed 官方 GTK 的 Javascript 绑定。
node.js seems to be the Javascript implementation of the V8 Javascript engine used by Google Chrome. What you want to create is a new javascript binding for GTK, and this should be done using the GObject-introspection work, not binding each function by hand.
Give a look at what has been done for Gjs and Seed official Javascript bindings for GTK.
不确定是否有特定的工具,但您应该能够使用 REGEX 快速创建一个解析器。 BOOST 正则表达式非常容易理解,应该可以让您快速理解。
Not sure there is a specific tool, but you should be able to whip up a quick parser using REGEX. BOOST regex is quite easy to understand and should get you there quickly.