跨C / C ++(非托管)和托管C#代码共享通用定义

时间:2009-12-22 16:42:27

标签: c# c++ architecture idl

我有一组结构定义,C#托管组件和非托管C / C ++组件都使用它们。现在,相同的结构定义分别存在于C / C ++和C#代码中 - 导致重复和相关的混乱。维护可以从C#和C / C ++使用的单个定义的最佳方法是什么? 谢谢! 阿米特

P.S。:我是一个C / C ++人,所以如果有一个明显的方法可以做到这一点,我可能会完全错过它!

3 个答案:

答案 0 :(得分:3)

显然,我对您的项目并不熟悉,但是您是否考虑过在C++/CLI为您的图书馆构建托管网桥?使用“It Just Works”破解C ++ / CLI编译器为您所做的很多次,您将能够使用本机代码来回编组和共享托管类型。

同样,我不知道它是否适合你,没有更多具体细节,但它可能值得研究。

答案 1 :(得分:1)

您需要IDL(界面定义语言)尝试使用Google搜索:

  1. 协议缓冲区。
  2. ICE(互联网通讯引擎)。
  3. 也许是Microsoft COM?。
  4. - 编辑:新条目 - 看来微软有IDL compiler
  5. 这完全取决于你想要什么。所有上述技术都有IDL元素,并带有自己的行李。 我个人会保持低级C / C ++:D。所以我会谷歌“Imatix GSL”并使用上述技术来模拟XML中的问题并生成数据结构在任何编程语言中 - 这项技术非常简单和微妙,需要经验丰富的程序员,所以如果它没有意义,你应该坚持使用IDL。

    - 编辑:编程技巧 -

    如果您愿意,可以通过纯技术解决问题。当严谨的工程破裂时,就会出现混乱。如果您决定使用防火墙并将问题封装到纯C / C ++代码中,则不必担心依赖代码中的接口下降 - 这是因为任何有用的语言都可以与ABI接口你的平台(简单的C函数:P)。关键不是暴露内部,而是暴露类型的接口,例如表示可以对类型执行的对象和函数的数字句柄。

答案 2 :(得分:1)

我曾经想在我的一个C#代码和C代码之间难以分离的项目中这样做。理想情况下,C#代码可以从C代码中借用头文件,但是:

  • 由于C#不支持include,我不知道如何共享结构的定义并将其包含在C#或C / C ++代码中
  • 将我的结构定义放在单独的标题中无论如何都不方便
  • 我不想依赖IDL或自定义“解析C头并仅提取结构定义”预处理步骤