2009-05-28 8 views
6

Czy ktoś wie, jak osadzić środowisko wykonawcze Mono w aplikacji Delphi Win32? Oficjalne dokumentacje nie są zbyt pomocne w odniesieniu do środowiska Win32 (www.mono-project.com/Embedding_Mono).Osadzanie Mono w Delphi Win32

Aktualizacja:

jestem bardzo obeznany z kaprysami linkowania statycznego w Delphi i byłoby idealnie zadowolony z DLL. Samo Mono ma zależności, więc jedna dodatkowa biblioteka DLL naprawdę nie jest wielka. Komentarz dotyczący słowa kontrolnego FPU jest jedną z moich obaw, ponieważ uważam, że ustawienia domyślne CG są inne niż narzędzia Microsoft. Oto co wierzę jest potrzebne: (? Jest jeden dostarczany z Mono użytkowej)

  • Header tłumaczenie z „C” do Delphi (prawdopodobnie nie jest zbyt twarde)
  • Kompilacja Mono DLL
  • lepsze zrozumienie FPU słowo sterujące goctha w (miejmy nadzieję brak)
  • Niektóre informacje zwrotne od kogoś, że ma blizny bitwy z próbowałem ten wyczyn;)

Aktualizacja (12.06.2011):

W przypadku gdy ktoś jest zainteresowany, po prostu znalazłem projektu na Google Code do osadzania Mono w aplikacji Delphi:

monoemb4delphi

Odpowiedz

6

Wydaje się, że Mono można budować z mingw, jednak większość odniesień znalazłem przekompilowany z Linuksa, np. http://www.mono-project.com/Cross-compiling_Mono_for_Windows

Powiedziałbym pierwszym priorytetem jest poszukiwanie dll libmono że

  • nie wykorzystać Cygwin (uwierzcie mi)
  • jest znany do pracy, także poza mingw (MinGW uniknąć możliwe specyficzne Wymazanie C++, jeśli używane jest C++).
  • Najlepiej jeśli ma czytelny nagłówek.

Jeśli znajdziesz lub zbudujesz go jako DLL (w celu spełnienia właściwej uwagi mghie), napisz nagłówek (jak sugeruje Stijn), że może działać.

Nie będzie to jednak trywialne, maszyny wirtualne nie są dokładnie trywialnymi zwierzętami i oczekują problemów w zwykłych domenach z różnymi językami: inicjalizacja biblioteki (kolejność), maska ​​wyjątków FPU i ogólnie obsługa wyjątków. Częściowo dlatego też powiedziałem "wiem, że pracuję poza mingw", studium, w jaki sposób jest ono połączone z innymi kompilatorami, może dać wskazówki, jak właściwie to rozwiązać.

Należy pamiętać, że samouczek mono ma inicjator mono-lib, ale to nie znaczy, że wszystkie biblioteki, których używa monofon, są poprawnie zainicjowane. Szczególnie libc mingw może wymagać inicjalizacji, ponieważ są one zwykle inicjowane przez ctors.Moja (bardzo początkowa) Kod MinGW klej jest tutaj:

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

Z drugiej strony, w DLL może być inicjowane poprzez rutynę inicjalizacji DLL.

ja udało się zbudować GDB jako lib i używać go (statycznie w FPC choć nie miałem motywacji, aby DLL ponieważ była opcja)

Zauważ, że jeśli naprawdę musisz to zrobić sam, NIE jest to łatwy sposób.

+1

Nie wiem, czy to pomaga czy nie, ale środowisko wykonawcze Mono można również zbudować w Visual Studio 2008. Pliki rozwiązania znajdują się w/mono/msvc. – jpobst

+0

Myślę, że dla trasy DLL byłoby lepiej, co jest jedynym sposobem dla Delphi. (teoretycznie statycznie, gdy zbudowane z BCB może również działać) –

2

article by Rudy Velthuis ten pokazuje przykład jak połączyć lib C do Delphi. Przy odrobinie pracy powinno być możliwe uzyskanie dostępu do mono_jit_init z Delphi przy użyciu tej techniki.

+0

Mono to LGPL, więc statyczne łączenie w systemie Windows wymaga uzyskania licencji handlowej od firmy Novell, zgodnie z http://www.mono-project.com/Scripting_With_Mono (wyszukaj "Licencjonowanie"). – mghie

+0

Czy na pewno czytasz to poprawnie? Rozumiem, że potrzebujesz licencji komercyjnej, jeśli chcesz osadzić mono * i * chcesz odmówić dostępu do pojedynczego fragmentu aplikacji, aby uniknąć majsterkowania. –

+0

Powiązany artykuł dotyczy statycznego łączenia bibliotek C z kodem Delphi. Łączenie Mono w ten sposób złamałoby licencję, ponieważ nie można już zastąpić jej nowszą wersją. LGPL jest właśnie tam, aby zabezpieczyć prawo użytkowników do "majstrowania", że tak powiem. Jeśli użyjemy OTOH mono.dll, to zastosowalibyśmy standardowe sposoby korzystania z bibliotek DLL, a informacje w artykule Velthuis tak naprawdę nie pomogą. – mghie

2

Być może zechcesz rzucić okiem na http://www.remobjects.com/hydra.aspx.

+0

Mam Hydrę, ale tak naprawdę to nie rozwiązuje tego, co próbuję osiągnąć. Mianowicie umieć osadzić środowisko .Net i zapewnić ścisłą natywną integrację z Delphi. Hydra jest dobrym narzędziem BTW. –