Встраивание Mono в Delphi Win32

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

обновление:

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

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

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

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

monoemb4delphi

3 ответов


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

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

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

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

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

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

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

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

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

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


этой статьи на Руди Velthuis показывает пример, как связать c lib с Delphi. С немного работы должно быть возможно получить доступ mono_jit_init из Delphi, используя эту технику.


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