ANSI C作为C#项目的核心?这可能吗?

Nek*_*ios 4 c c# architecture

我正在编写一个非GUI应用程序,我希望它是OS X和Windows之间的跨平台.我正在考虑以下架构,但我不知道它是否适用于Windows端:

(平台特定入口点) - > ANSI C主循环=> ANSI C模型代码执行数据处理/逻辑=>(平台特定帮助程序)

所以我打算用常规的ANSI C编写核心内容,因为A)它应该是独立于平台的,B)我对C,C非常熟悉它可以完成这项工作并做得很好

(平台特定的入口点)可以用任何必要的方式编写来完成工作,这是一小部分代码,对我来说无关紧要.

(平台特定的帮助者)是棘手的事情.这就像解析XML,访问数据库,图形工具包等等.在C中不容易的事情.现代语言/框架将免费提供的东西.在OS X上,这段代码将用Objective-C与Cocoa连接编写.在Windows上,我认为我最好的选择是使用C#

所以在Windows上我的架构(简化)看起来像

(C#或C?) - > ANSI C - > C#

这可能吗?到目前为止的一些想法/建议..

1)将我的C核编译为.dll - 这很好,但似乎没有办法调用我的C#助手,除非我能以某种方式获取函数指针并将它们传递给我的核心,但这似乎不太可能

2)编译C .exe和C#.exe并让它们通过共享内存或某种IPC进行通信.我并不完全反对这一点,但它显然引入了很多复杂性,所以它看起来并不理想

3)而不是C#使用C++,它给我一些很好的数据管理和好帮手代码.我可以很容易地混合它.我所做的工作可能很容易移植到Linux.但我真的不喜欢C++,我不希望这会转向第三方图书馆节目.并不是说它是一个巨大的交易,但它是2010年......应该内置任何基本数据管理.而针对Linux并不是一个优先事项.

请注意,正如我所看到的其他类似问题中所建议的那样,没有"完全"的替代方案是可以的.java,RealBasic,mono ..这是一个非常性能密集的应用程序,用于游戏/模拟目的的软实时,我需要C和朋友在这里做得对(也许你没有,但我这样做)

Are*_*ren 6

简短回答:是的.您可以从.NET轻松访问非托管代码,但您必须整理数据.

答案长:不要这样做.你知道单声道项目吗?它是.NET的x平台实现.他们有点落后于微软,但他们仍然提供适用于许多人的解决方案.我强烈建议尽可能保留托管代码,如果你正在使用C代码,你就会破坏.NET的目的.这也有助于将项目复杂性降低十倍.

如果您需要ÇANSI低级别的访问,我建议你揭露一完善的测试 ÇANSI API到你的.NET核心做任何低层次的东西.

C#Core <==>小C ANSI助手库

  • 我认为OP希望非托管代码调用C#,而不是相反.这可以通过COM完成:ANSI C Core <==> C/C++ COM包装器<==> C# (2认同)