目标C - < - >单声道桥

时间:2009-10-29 09:40:36

标签: c# wpf objective-c mono gtk#

我正在考虑编写一个跨平台的桌面应用程序,最初用于Mac / Windows,但最终用于Linux。

目前,我打算像这样构建它:

  • 使用Cocoa / Objective C / Interface Builder的Mac UI
  • 使用WPF的Windows UI
  • 将来,Linux UI使用GTK#
  • C#中的业务/数据访问层 - 即Windows上的.NET,Mac / Linux上的Mono

这在Windows上显然会很好,我很确定在基于我见过的GTK#apps的Linux / Gnome上它会很好。然而,在Mac上调用Mono ...我想我有这些选择:

  • ObjC#
  • Dumbarton(看起来有点死)
  • Monobjc(这意味着用C#而不是Objective C编写Mac UI - 对此不太感兴趣)

我的问题:有没有人有过以类似方式构建应用程序的经验?有什么建议?我疯了吗?

仅供参考 - 我非常挑剔桌面用户界面与其主机操作系统“在一起”,所以我对笨重的WinForms / Java / QT解决方案不感兴趣......

4 个答案:

答案 0 :(得分:2)

如果有人绊倒了......

MonoMac看起来将是明显的前进方式。

答案 1 :(得分:1)

对于它的价值,我来自Mac方面。但我认为我的意见是普遍适用的。

鉴于您表示希望使用特定于平台的UI编写应用程序,我认为ObjC#是唯一合理的选择。在Objective-C中实现Mac端UI有大量资源;我认为将你找到的所有建议翻译成Monobjc是浪费你的时间,特别是当你遇到一个希望你转动一些指针并传递一个函数句柄的API时哦,你现在没做什么。您可以在应用之间共享的唯一内容是模型代码;我假设没有理由在演示方面尝试使用相同的语言,除非您认为自己不能或不能熟悉Objective-C。

答案 2 :(得分:0)

我用C#编写了2年的商用台式机Mac应用程序。我们有一个用Objective C编写的库,它暴露了简单的C函数。我们的C#代码PInvokes到简单的C函数。

最初,该应用程序使用了MonobjC,然而,MonobjC被证明太难以使用了。许多Mac API无法很好地转换为C#,或者您需要成为Objective C和MonobjC语义的专家才能进行简单的函数调用。 Objective C的消息传递系统并不总是转换为C#方法调用。

当我评估MonoMac时,它不如MonobjC成熟。除了坚持使用MonoTouch的风格和图案外,我没有得到它对MonobjC有任何真正改进的印象。

因此,我强烈建议在C#中使用某种形式的PInvoking到Objective C,或者遵循Embedding Mono指南。 http://www.mono-project.com/Embedding_Mono

答案 3 :(得分:0)

你看看Dubrovnik。这是Dumbarton的更新版本,包括代码生成器。

代码生成器极大地减少了直接对嵌入式API进行编码的需求。只需将生成器指向托管程序集并将Obj-C输出集成到项目中即可。