Встраивание моно в Delphi Win32 - PullRequest
7 голосов
/ 28 мая 2009

Кто-нибудь знает особенности встраивания среды выполнения Mono в приложение Delphi Win32? Официальная документация не очень полезна в отношении среды Win32 ( www.mono-project.com / Embedding_Mono ).

Обновление:

Я очень хорошо знаком с капризами статической компоновки в Delphi и был бы очень доволен DLL. Mono сам по себе имеет зависимости, так что еще одна DLL на самом деле не составляет большого труда. Комментарий о контрольном слове FPU - одна из моих проблем, так как я считаю, что настройки CG по умолчанию отличаются от инструментов Microsoft. Вот что я считаю необходимым:

  • Перевод заголовка с "C" на Delphi (вероятно, не слишком сложно)
  • Компиляция Mono DLL (поставляется ли в комплекте с Mono?)
  • Лучшее понимание контрольного слова FPU у Гокта (надеюсь, нет)
  • Некоторые отзывы от кого-то, у кого боевые шрамы, после того, как он попробовал этот трюк;)

Обновление (6-12-2011):

На случай, если кому-то будет интересно, я только что нашел в Google Code проект для встраивания Mono в приложение Delphi:

monoemb4delphi

Ответы [ 3 ]

6 голосов
/ 28 мая 2009

Mono, кажется, может быть собран с помощью mingw, хотя большинство ссылок, которые я нашел, были кросс-компилированы из Linux, например http://www.mono -project.com / Cross-compiling_Mono_for_Windows

Я бы сказал, что вашим первым приоритетом является поиск DLL-библиотеки libmono,

  • не использует Cygwin (поверь мне)
  • , как известно, работает, также вне mingw (избегайте возможного искажения, специфичного для mingw в C ++, если используется C ++)
  • Предпочтительно поставляется с читаемым заголовком.

Если вы найдете или создадите его как DLL (чтобы удовлетворить правильное замечание mghie), напишите заголовок (как предлагает Стийн), он может работать.

Хотя это не будет тривиально, виртуальные машины - не совсем тривиальные звери, и они ожидают проблем в обычных многоязычных проблемных областях: инициализация библиотеки (порядок), маска исключений FPU и обработка исключений в целом. Частично именно поэтому я и сказал «знать, как работать вне mingw», изучение того, как оно взаимодействует с другими компиляторами, может дать подсказки, как правильно решать эту проблему.

Обратите внимание, что у моно-учебника есть инициализатор моно-библиотеки, но это не значит, что все библиотеки, которые использует моно, правильно инициализированы. Специально для libc mingw может потребоваться инициализация, так как они обычно инициализируются через ctors. Мой (очень начальный) код клея mingw здесь:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/fpmingw.pas?view=markup

С другой стороны, в DLL она может быть инициализирована с помощью подпрограммы инициализации DLL.

Я сам смог собрать GDB как библиотеку и использовать ее (хотя статически в FPC у меня не было мотивации для создания DLL, так как это было опцией)

Обратите внимание, что если вам действительно нужно сделать это самостоятельно, это НЕ простой способ.

2 голосов
/ 28 мая 2009

Возможно, вы захотите взглянуть на http://www.remobjects.com/hydra.aspx.

2 голосов
/ 28 мая 2009

Эта статья Руди Велтуиса показывает пример того, как связать C lib с Delphi. Немного поработав, вы сможете получить доступ к mono_jit_init из Delphi, используя эту технику.

...