2011-01-05 3 views
2

При изучении C# и Delphi Prism для использования с monotouch полезно, я ищу способ повторного использования кода, написанного на обычном Object Pascal. Просто переписать все, что я делал в Delphi более 15 лет, просто неприемлемо.Использование библиотеки freepascal (.dylib) от mono

Так что мой вопрос имеет два аспекта:

  1. Если я ради аргумента есть библиотеки, написанная в обычном объекте Паскаля без каких-либо внешних зависимостей и скомпилирована с ARM FreePascal компилятор для iPhone - я мог используйте результирующий dylib от monotouch?
  2. Если это верно, как я могу объявить и вызывать эти внешние функции из C#/Prism? Как я могу справиться с передачей типов записей и т. Д. В моно?

Я заметил, что другие приложения для iPhone поставляются со своими файлами dylib (типичная примерная игровая библиотека SDL). Я не нахожу причин, почему это не должно работать.

+0

примечание есть 'dylib' тег, может быть, он привлекает больше читателей – mjn

+0

максимум 5 тегов печально –

+0

Почему бы вам не попробовать веб-поиска? Я предлагаю следующие условия поиска: mono freepascal dylib –

ответ

3

Я не работал с monotouch, но у Mono/.NET есть функция P/Invoke (платформа invoke).

В основном вы объявляете свои функции/процедуры как внешние в управляемом коде и добавляете атрибут DLLImport.

В отличие от его имени DLLImport импортирует функции/процедуры из .so файлов в файлы Linux и .dylib.

http://www.mono-project.com/Interop_with_Native_Libraries

P/Invoke in Mono

1

Я ничего не знаю о MonoTouch, и меньше о Mac, относящемся к Arm устройств, но:

Если Lib использует преимущественно Cdecl соглашение о вызовах и MonoTouch может возможно назвать Cdecl (C) функцию над некоторым нативным механизмом работы (P/Invoke или JNI like stuff), это было бы базовым принципом, который мог бы работать.

То же самое для структур, объявлять с помощью {$ packrecords C}.

Вам также может потребоваться вызывать две функции (IIRC FPC_INITIIALIZE, а еще один для завершения) для инициализации/завершения RTF FPC перед вызовами функций.

Все, что находится над равным уровнем C, например Объекты Delphi и, возможно, не пригодны для использования и должны быть обернуты. Может быть, Объект Объекты Pascal могут использоваться повторно (по крайней мере, если моноточ понимает объективные C-единицы), но, как и большинство других конкретных вещей Apple, это не моя сильная сторона.

Смежные вопросы