【问题标题】:Mono Resources for Cross Platform Development用于跨平台开发的 Mono 资源
【发布时间】:2009-12-08 19:16:38
【问题描述】:

是否有关于单声道跨平台开发信息的站点或存储库?显然我知道MomaCross Platform Guidlines,并且我正在使用Visual Studio Tools 在虚拟机中运行和调试应用程序,但是由于我正在迁移一个旧应用程序,所以我有几十个(如果不是几百个)PInvokes迁移。当然,每个这样做的人都曾经遇到过这些问题,并且有解决方案或解决方案的建议。而不是在stackoverflow上发布一百个“什么是与user32.dll GetKeyState()等效的Mono”(或者这可能是解决方案),是否有一个存储库(像Pinvoke.net这样的wiki),或者它是否隐藏在@ 987654324@ 来自他们的搜索和google search

为了回答下面的评论,我正在寻找进行 API 调用的跨平台方法。显然,最好的解决方案是使用托管方式来做所有事情,但是一些关于如何在 Windows、Linux 和 Mac 上执行此操作的参考也会非常有帮助。由于缺乏响应,我猜测不存在这样的参考站点,也许应该启动它。即使 mono 项目启动了一个从应用程序可移植性指南开始的 wiki,我相信它会随着时间的推移而发展并对社区有很大的用处。

【问题讨论】:

  • 您是在寻找可跨平台工作的特定 PInvoke 调用的托管代码等价物,还是在寻找 Windows API 调用的 Linux 等价物?

标签: c# .net mono cross-platform pinvoke


【解决方案1】:

我最近遇到了同样的问题。我要告诉你我的成功故事。

我的应用程序使用了一些第三方组件。其中一些使用 PInvokes。在第一次 MOMA 运行时,大约有 20 个位置。我用类似的 crossplaform(没有 PInvokes)替换了一个组件 - 剩下 10 个位置。我必须自己编写大约 5 个地方(很容易找到一些解决方法)——还剩 5 个地方。这 5 个地方实际上从未调用过。

我认为我们的许多 PInvokes 也从未被调用过。

【讨论】:

    【解决方案2】:

    API 的可移植性和使用是相互排斥的。在创建某些软件时使用平台特定 API 意味着它不会在任何其他平台上工作,并且无法保证 在其他系统中甚至有类似的 API。如果您有大量使用 API 的代码,如果您希望将其移植到另一个平台,您可能别无选择,只能重新实现(部分)程序。这不是可以通过 Find+Replace 一个 API 函数来解决的问题(尽管这在某些情况下可能适用),因此不太可能存在在它们之间进行翻译的字典,而且无论如何都是不完整的。 您必须重写代码! 阅读手册页、google 等...然后如果您有具体问题,您可以询问他们。而不是向这个网站发送垃圾邮件,对每一件事都提出问题......!

    为避免整个 API 问题,而不是在最初编写代码时直接使用 API,您可以使用为所需功能设计的 可移植 库(Google 应该会在这方面为您提供帮助),这将为你做适当的 API 调用,库的维护者必须担心所有特定于平台的问题,所以你不必担心!一个很好的例子(对于 C++)是 SDL,它处理视频、音频和控制器设备。请注意,它包含GetKeyState 的可移植版本!当然,.NET/Mono 库本身隐藏了很多 API 调用。

    在移植您的程序(如果存在)时,使用与 Windows API 具有类似接口的库可能是一个好主意,而不是将所有内容都转换为 Linux API(从而使软件可移植),但我认为最好的计划是查看所使用的 API 的用途,然后研究如何以可移植的方式做到这一点,而不是尝试单独翻译每个函数。请记住,在寻找解决方案时,这些功能可能是相互依赖的,并且可以围绕一组任务组合在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2014-05-22
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多