跨平台开发的Mono资源

4

是否有关于在Mono中进行跨平台开发的信息站点或存储库?显然我知道Moma跨平台指南和我正在使用Visual Studio工具在虚拟机中运行和调试应用程序,但是由于我正在迁移一个旧应用程序,我有几十个(如果不是数百个)PInvoke需要迁移。肯定每个做这件事的人都遇到过这些问题,并且有解决方案或解决方案建议。与其在stackoverflow上发布一百个“Mono等价于user32.dll GetKeyState()”(也许这就是解决方案),是否有存储库(类似于Pinvoke.net的wiki),或者它是否隐藏在mono论坛Google搜索的搜索结果之外?

为了回答下面的评论,我正在寻找跨平台的API调用方式。显然,最好的解决方案是拥有一种托管方式来完成所有操作,但在Windows、Linux和Mac上如何实现也非常有帮助。从缺乏响应的情况来看,我猜想没有这样的参考网站存在,也许应该建立这样一个网站。即使mono项目启动了一个维基,开始了应用程序可移植性指南,我相信它会随着时间的推移而不断壮大,并对社区非常有用。

你是在寻找跨平台可用的特定PInvoke调用的托管代码等效项,还是在寻找Windows API调用的Linux等效项? - Jeff French
2个回答

1

我最近也遇到了同样的问题。现在我来分享一下我的成功经验。

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

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


0

可移植性和API的使用是互相排斥的。在创建某个软件时使用特定于平台的API意味着它无法在任何其他平台上工作,而且其他系统中可能没有类似的API。如果您的代码大量使用API,则可能没有选择,除非重写程序的(部分)代码,如果要将其移植到另一个平台。这不是通过查找并替换一个API函数而可以解决的问题(尽管在某些情况下可能适用),因此翻译字典的存在是不太可能的,而且无论如何也是不完整的。您必须重新编写代码!阅读手册,谷歌等等......然后,如果您有具体问题,可以询问它们,而不是在这个网站上发布每一个单一的问题...!

为了避免API问题,编写代码时最好不要直接使用APIs,而是可以使用一个专门为所需功能设计的可移植库(Google可以帮助你),它会根据需要为您调用API,并且库的维护者必须担心所有特定于平台的问题,因此您不必担心! C++的一个很好的例子是SDL,它处理视频、音频和控制器设备。请注意,它包含GetKeyState的可移植版本!当然,.NET/Mono库本身会为您隐藏许多API调用。
在移植程序时,最好使用与Windows API类似的接口库(如果存在),而不是将所有内容翻译成Linux API(从而使软件具有可移植性),但我认为最好的方法是查看所使用的API的用途,然后研究如何以可移植的方式完成,而不是尝试逐个翻译每个函数。请记住,这些函数可能相互依存,并且可以围绕某些任务集合进行分组,寻找解决方案时要考虑到这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接