【发布时间】:2010-06-16 15:21:07
【问题描述】:
我正在编写一个非 GUI 应用程序,我想成为 OS X 和 Windows 之间的跨平台。我正在看下面的架构,但不知道它是否可以在windows端工作:
(平台特定入口点)-> ANSI C 主循环 => 执行数据处理/逻辑的 ANSI C 模型代码 =>(平台特定助手)
所以我打算用常规的 ANSI C 编写核心内容,因为 A) 它应该独立于平台,B) 我对 C 非常熟悉,C) 它可以完成这项工作并且做得很好
(平台特定入口点)可以写成完成工作所需的任何内容,这是少量代码,对我来说无所谓。
(平台特定的助手)是很棘手的。这就像解析 XML、访问数据库、图形工具包之类的东西。在 C 中不容易做的事情。现代语言/框架将免费提供的东西。在 OS X 上,此代码将使用与 Cocoa 交互的 Objective-C 编写。在 Windows 上,我认为我最好的选择是使用 C#
所以在 Windows 上我的架构(简化)看起来像
(C# 还是 C?) -> ANSI C -> C#
这可能吗?到目前为止的一些想法/建议..
1) 将我的 C 内核编译为 .dll ——这很好,但似乎没有办法调用我的 C# 助手,除非我能以某种方式获取函数指针并将它们传递给我的内核,但这似乎不太可能
2) 编译一个 C .exe 和一个 C# .exe 并让它们通过共享内存或某种 IPC 进行通信。我并不完全反对这一点,但它显然引入了很多复杂性,因此看起来并不理想
3) 代替 C# 使用 C++,它为我提供了一些不错的数据管理内容和不错的帮助代码。我可以很容易地混合它。我所做的工作可能很容易移植到 Linux。但我真的不喜欢 C++,而且我不希望这变成 3rd-party-library-fest。并不是说这是什么大不了的事,而是 2010 年......应该内置任何用于基本数据管理的东西。针对 Linux 确实不是优先事项。
请注意,正如我在 SO 上看到的其他类似问题中所建议的那样,没有“全部”替代方案是可以的; java、RealBasic、mono.. 这是一个性能极其密集的应用程序,为游戏/模拟目的进行软实时,我需要 C 和朋友来做正确的事情(也许你不这样做,但我这样做)
【问题讨论】:
标签: c# c architecture