Использование библиотеки FreePascal (.dylib) из моно

2

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

Итак, мой вопрос двоякий:

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

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

  • 0
    обратите внимание, что есть тег dylib , возможно, он привлекает больше читателей
  • 0
    Максимум 5 тегов к сожалению
Показать ещё 4 комментария
Теги:
xamarin.ios
freepascal
dylib

2 ответа

3
Лучший ответ

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

В основном вы объявляете свои функции/процедуры как extern в управляемом коде и добавляете атрибут 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 могут использоваться повторно (по крайней мере, если monotouch понимает объективные C-элементы), но, как и большинство других конкретных Apple, это не моя сильная сторона.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню