Моно-ресурсы для кроссплатформенной разработки

Есть ли сайт или хранилище информации о кроссплатформенной разработке в моно? Очевидно, я знаю о Moma и Cross Platform Guidlines, и я использую Visual Studio Tools для запуска и отладки приложений на виртуальной машине, однако, поскольку я мигрирую старое приложение, мне нужно перенести десятки (если не сотни) PInvokes. Несомненно, каждый, кто это делает, должен был сталкиваться с этими проблемами раньше и иметь решения или предложения по их решению. Вместо того, чтобы публиковать сотню вопросов «Что такое Mono-эквивалент user32.dll GetKeyState ()» в stackoverflow (или, может быть, это решение), существует ли репозиторий (вики, например Pinvoke.net), или он спрятан в монофорумы из результатов поиска и поиск в Google?

Чтобы ответить на комментарий ниже, я ищу кроссплатформенные способы выполнения вызовов API. Очевидно, что лучшее решение - иметь управляемый способ делать все, но какая-то справка о том, как это сделать в Windows, Linux и Mac, также будет невероятно полезной. Из-за отсутствия ответа я предполагаю, что такого справочного сайта не существует, и, возможно, его следует запустить. Даже если монопроект запустил вики, которая начиналась с рекомендаций по переносимости приложений, я уверен, что со временем она будет расти и принесет большую пользу сообществу.


person Kris Erickson    schedule 08.12.2009    source источник
comment
Вы ищете эквиваленты управляемого кода для определенных вызовов PInvoke, которые будут работать на разных платформах, или вы ищете Linux-эквиваленты вызовов Windows API?   -  person Jeff French    schedule 11.12.2009


Ответы (2)


Недавно у меня была примерно такая же проблема. Я расскажу вам свою историю успеха.

В моем приложении используются сторонние компоненты. Некоторые из них используют PInvokes. На первом забеге MOMA было около 20 мест. Заменил один компонент на аналогичный кроссплатформ (без PInvokes) - осталось 10 мест. Около 5 мест, которые мне пришлось написать самому (легко нашел обходные пути) - осталось 5 мест. Эти 5 мест на самом деле никогда не назывались.

Я предполагаю, что многие из наших PInvokes тоже никогда не вызываются.

person Vasyl Boroviak    schedule 12.12.2009

Переносимость и использование API - вещи взаимоисключающие. Использование специфичных для платформы API-интерфейсов при создании некоторого программного обеспечения означает, что оно не будет работать на любой другой платформе, и нет никаких гарантий что есть даже аналогичный API в других системах. Если у вас есть код, который интенсивно использует API-интерфейсы, у вас, вероятно, нет другого выбора, кроме как повторно реализовать (части) программы, если вы хотите перенести ее на другую платформу. Это НЕ то, что можно решить с помощью поиска и замены одной функции API на другую (хотя это может быть применимо в некоторых случаях), поэтому наличие словаря для перевода между ними маловероятно. , и в любом случае будет неполным. Вам необходимо переписать код! Прочтите руководства, Google и т. д. ... а затем, если у вас есть особые проблемы, вы можете спросить о них. Вместо того, чтобы спамить этот сайт с вопросами по каждому поводу ...!

Чтобы избежать всей этой проблемы API, вместо того, чтобы использовать API непосредственно при написании кода изначально, вы можете использовать переносимую библиотеку, разработанную для требуемых функций (Google должен вам в этом помочь), которая будет выполнять API призывает вас по мере необходимости, а сопровождающие библиотеки должны беспокоиться обо всех проблемах, связанных с платформой, так что вам не нужно! Хорошим примером этого (для C ++) является SDL, который обрабатывает видео, аудио и контроллеры. Обратите внимание, что он содержит переносную версию GetKeyState! Сама библиотека .NET / Mono, конечно же, скрывает от вас множество вызовов API.

Вероятно, будет хорошей идеей использовать библиотеку с интерфейсом, аналогичным интерфейсу Windows API, при переносе вашей программы (если таковая существует), а не переводить все в Linux API (что делает программное обеспечение переносимым), но я думаю, что лучший план - это чтобы узнать, для чего используются API, затем исследуйте, как это сделать переносимым способом, вместо того, чтобы пытаться переводить каждую функцию по отдельности. Имейте в виду, что при поиске решений функции могут быть взаимозависимыми и могут быть сгруппированы вокруг некоторого набора задач.

person KernelJ    schedule 11.12.2009