我有一组由C#托管组件和非托管C/C++组件使用的结构定义。现在,相同的结构定义在C/C++和C#代码中分别存在-导致重复和相关的混乱。维护既可在C#中使用又可在C/C++中使用的单一定义的最佳方法是什么?谢谢!阿米特
附言:我是一个喜欢C/C++的人,所以如果有一个显而易见的方法来做这件事,我可能会完全错过它!
发布于 2009-12-23 00:47:04
很明显,我不熟悉您的项目,但是您是否考虑过在C++/CLI中为您的库构建一个托管桥(http://msdn.microsoft.com/en-us/library/ms379617(VS.80%29.aspx)?使用C++/CLI编译器所做的“它就行了”),很多时候您将能够与本机代码来回封送和共享托管类型。
再说一次,我不知道在没有更多细节的情况下它是否适合您,但它可能值得研究一下。
发布于 2009-12-23 00:43:58
你需要一个IDL (接口定义语言),试着谷歌一下:
编辑
这完全取决于你想要什么。所有上述技术都有一个IDL元素,并且都有自己的一套包涵。我个人会保持低级的C/C++ :D.所以我会谷歌"Imatix GSL"并使用提到的技术在中对问题建模并在任何编程语言中生成数据结构--这种技术非常简单和微妙,需要有经验的程序员,所以如果它没有意义,你应该坚持使用IDL。
--编辑:编程技术--
如果你愿意,你可以通过纯技术来解决这个问题。当工程的严格性崩溃时,混乱随之而来。如果您决定使用防火墙并将问题封装到纯C/C++代码中,则不必担心接口会在依赖代码中丢失--这是因为任何通用语言都可以与您的平台的ABI接口(简单的C函数:P)。问题的关键不是公开内部,而是一个具有不透明类型的接口,例如表示对象和可能在类型上执行的函数的数字句柄。
发布于 2009-12-23 00:47:08
我曾经想在我的一个项目中这样做,这个项目在C#代码和C代码之间存在很大的分离。理想情况下,C#代码将借用C代码中的头文件,但是:
https://stackoverflow.com/questions/1947576
复制相似问题