混合来自不同编译器的C++代码

Jam*_*ton 15 c c++ windows swig

假设我有两个项目要联系在一起:

  • 用Visual C++编译为DLL文件的C++库.
  • 使用C++ Builder编译的C++可执行文件,它使用库中的类.

我意识到没有标准的C++ ABI,任何将这两个C++项目直接链接在一起的尝试都会失败.什么是创建兼容性层的好的,自动化的方式,允许我完成此任务?

例如,可以想象C++库可以通过C接口暴露自己.然后,可执行文件将包含一些C++类,这些类包装C++库公开的C接口.由于一个标准的ABI的C,它会工作.

唯一的问题是如何自动创建C接口和C++包装类 - 手动维护这不是一个选项.SWIG项目看起来很有希望,但不幸的是,C++并不是他们网站上列出的SWIG的出口之一.有没有办法用SWIG做我想做的事情?或者除了SWIG之外还有其他项目可以帮助我完成这项任务吗?

或者我是以错误的方式来做这件事的?

编辑: 核心C++库旨在跨平台.显然,可执行文件是特定于Windows的.我不想污染核心库,以至于无法在其他平台上编译它.

Fer*_*cio 5

如果它只需要在Windows上运行,我会将这些类公开为COM对象.它们仍然在DLL中,它们可以被任何理解COM的语言使用.

  • COM不会"带来dll地狱",如果你有问题,至少只是说你不喜欢它而不是弥补废话.事实上,你会被建议今天让它们成为WinRT对象(这是一种COM对象),因为你很快就无法远离它们.对于将为您的方法生成存根的自动化工具 - midl或DCE-RPC idl生成器(跨平台)将执行此操作 - 您将获得进程内RPC调用,这几乎与正常函数调用一样有效. (5认同)