跨平台开发的单一资源

时间:2009-12-08 19:16:39

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

是否有单声道跨平台开发信息的站点或存储库?显然我知道MomaCross Platform Guidlines并且我使用Visual Studio Tools来运行和调试虚拟机中的应用程序,但是因为我正在迁移一个旧的应用程序,所以我有几十个(如果不是数百个PInvokes要迁移。当然,所有这样做的人必须先遇到这些问题,并提出解决方案或解决方案的建议。而不是在stackoverflow上发布一百个“什么是mono等效的user32.dll GetKeyState()”(或许这就是解决方案),是否有一个存储库(像Pinvoke.net这样的维基),或者它隐藏在{ {3}}来自他们的搜索和mono forums

要回答下面的评论,我正在寻找跨平台的API调用方式。显然,最好的解决方案是采用Managed方式来完成所有工作,但是在Windows,Linux和Mac上如何进行操作的某种参考也会非常有用。由于缺乏响应,我猜测没有这样的参考站点,也许它应该开始。即使单声道项目启动了一个以应用程序可移植性指南开始的wiki,我相信它会随着时间的推移而增长,对社区有很大用处。

2 个答案:

答案 0 :(得分:1)

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

我的应用程序使用一些第三方组件。他们中的一些人使用PInvokes。在第一次MOMA比赛中,大约有20个名额。我用一个类似的交叉平面替换了一个组件(没有PInvokes) - 剩下10个位置。大约有5个地方我必须自己编码(很容易找到一些解决方法) - 剩下5个地方。这5个地方实际上从未打过电话。

我假设我们的许多PInvokes也从未被调用过。

答案 1 :(得分:0)

API的可移植性和使用是互斥的。在创建某个软件时使用特定于平台的 API意味着在任何其他平台中都无法正常运行,并且无保证在其他系统中甚至有类似的API。如果你有大量使用API​​的代码,你可能别无选择,只能重新实现(部分)程序,如果你想将它移植到另一个平台。这是 NOT 可以通过Find +将一个API函数替换为另一个API函数来解决的问题(虽然这在某些情况下可能适用),因此不太可能存在要在它们之间进行转换的字典,无论如何都不完整。 您必须重写代码!阅读联机帮助页,Google等...然后如果您遇到特定问题,可以询问它们。而不是垃圾邮件这个网站的每一件事都有问题......!

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

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