【发布时间】:2013-07-18 23:27:59
【问题描述】:
假设我有一个 C++ DLL。 AFAIK,没有广泛采用的 C++ ABI 标准,因此为了确保它可以工作并且不依赖于目标应用程序的编译器,我需要将我的库包装在 C 接口中。
有没有工具可以自动生成这样的界面?如果他们可以围绕 C 接口生成包装器,看起来就像是原始 C++ 对象,例如
Foo* f = new Foo(); // FooWrapper* fw = Foo_create();
f->bar("test"); // Foo_bar(fw, "test")
翻译成使用生成的 C ABI 在我的库中调用的 C 函数。我知道 C++ 是一种相当复杂的语言,并不是所有东西都可以轻松地包装在 C 接口中,但我想知道是否有任何这样的解决方案甚至支持 C++ 语言的子集(也许在一些手动编写的 IDL/ 的帮助下) XML 文件)?
【问题讨论】:
-
遇到模板和异常时会遇到麻烦。
-
@MooingDuck:我原以为模板可能会出现问题。但是模板不是总是由目标编译器编译的吗?这不就是为什么它们总是需要在头文件中定义吗?
-
true,如果你不是 wrappipng 模板类/函数,而只是包装模板实例,那么你很好。
-
cpp2c.webs.com 声称可以这样做,但我没有尝试过,它说:“Cpp2C 是一个 Python 脚本。 Cpp2C 已经用 Python 2.6 测试过,……它还没有用 Python 3 测试过。”