从C++生成C包装器?

23
我想从 C++ 库生成 C 包装器。有一些手动操作的教程可以实现这一点: 但是这太费力了。
例如,对于以下内容:
struct RtAudio {
    virtual DeviceInfo const& f() {...}
    class DeviceInfo {
        virtual void g() { ... }
    };
    ...
};

我需要写:

struct RtAudioC {
    RtAudio x;
};
struct DeviceInfo {
    RtAudio::DeviceInfo x;
};
extern "C" {
    RtAudioC* newRtAudio() { 
        return new RtAudioC;
    }
    void deleteRtAudio(RtAudioC *p {
        delete p;
    }
    /* do something with RtAudio::f() */
    void g(DeviceInfo *p) {
        try {
            p->x.g();
        } catch (SomeError & err) {
        }
    }
}

有没有可以自动化这个过程的工具?

5个回答

2
我刚刚在Python中开发了一个C函数包装器,用于生成包装C函数的C++类。
它还很年轻,但我需要它完成的大部分工作都已经完成了。请试试并告诉我您的想法:https://github.com/mlb5000/CFunctionWrapperGenerator

2

你可以尝试使用SWIG,这是去年的GSoC项目之一,用于生成C代码。据我所知,他们还没有将其合并到主干中,因此您需要从SVN中检出和构建该分支。


1

有一个名为gmmproc的工具,它可以为基于gobject的C库创建C++包装器,但这是我所知道的在C和C++之间的唯一代码生成器。

如果你擅长编写解析器,那么创建一个基本的包装器生成器并不是太困难的任务。最终你可能需要手动添加一些完善的细节,但仍然可以减轻你的工作负担。


1
你的C++代码有多少已经写好了,还有多少尚未完成? 如果待完成的部分比例合理,我会创建一个简化的语法,可以生成C++和C头文件,就像IDL为COM接口所做的那样。这个简化的语法对你来说会更容易解析,或者你可能能找到现成的工具来实现这一点。

0

我不知道有没有现成的工具可以做到这一点。如果你想自动化生成并且愿意编写自己的脚本,pygccxml(基于GCC-XML)是解析C++头文件的一种不错的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接