Использование библиотеки FreePascal (.dylib) из моно - PullRequest
2 голосов
/ 05 января 2011

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 05 января 2011

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

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

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

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

P / Invoke in Mono

1 голос
/ 05 января 2011

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

Если ваша библиотека использует в основном соглашение о вызовах cdecl, и monotouch, возможно, может вызывать функции cdecl (C) поверх некоторых собственных операциймеханизм (P / Invoke или JNI-подобные вещи), который будет базовым принципом, который может работать.

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

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

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

...