【发布时间】:2010-12-29 04:30:45
【问题描述】:
我有一组 C# 托管组件和非托管 C/C++ 组件都使用的结构定义。现在,相同的结构定义分别存在于 C/C++ 和 C# 代码中 - 导致重复和相关的混乱。维护可以从 C# 和 C/C++ 使用的单个定义的最佳方法是什么? 谢谢! 阿米特
P.S.:我是 C/C++ 人,所以如果有明显的方法可以做到这一点,我可能会完全错过它!
【问题讨论】:
标签: c# c++ architecture idl
我有一组 C# 托管组件和非托管 C/C++ 组件都使用的结构定义。现在,相同的结构定义分别存在于 C/C++ 和 C# 代码中 - 导致重复和相关的混乱。维护可以从 C# 和 C/C++ 使用的单个定义的最佳方法是什么? 谢谢! 阿米特
P.S.:我是 C/C++ 人,所以如果有明显的方法可以做到这一点,我可能会完全错过它!
【问题讨论】:
标签: c# c++ architecture idl
我曾经想在我的一个项目中这样做,该项目在 C# 代码和 C 代码之间存在硬分离。理想情况下,C# 代码会从 C 代码中借用头文件,但是:
【讨论】:
您需要 IDL(接口定义语言)尝试谷歌搜索:
这一切都取决于你想要什么。上述所有技术都有 IDL 元素,并带有自己的包袱。 我个人会保持低级 C/C++ :D。 所以我会谷歌 “Imatix GSL” 并使用上述技术在 XML 中建模问题并生成数据结构在任何编程语言中——这项技术非常简单和微妙,并且需要有经验的程序员,所以如果它没有意义,你应该坚持使用 IDL。
-- 编辑:编程技术--
如果您愿意,可以通过纯技术解决问题。当工程的严谨性崩溃时,混乱随之而来。如果您决定使用防火墙并将问题封装到纯 C/C++ 代码中,您将不必担心接口会在您的依赖代码中出现——这是因为任何有用的语言都可以与您的 ABI 接口平台(简单的 C 函数:P)。关键不是暴露内部结构,而只是一个具有不透明类型的接口,例如表示可以在您的类型上执行的对象和函数的数字句柄。
【讨论】:
显然,我不熟悉您的项目,但您是否考虑过在C++/CLI 中为您的库构建托管桥?通过 C++/CLI 编译器为您执行的“It Just Works”黑客攻击,您可以多次编组和共享托管类型与本机代码来回。
同样,如果没有更多细节,我不知道它是否适合您,但它可能值得研究。
【讨论】: