środa, sierpnia 20, 2008

JCall - wołaj funkcje C z Javy

W środowiskach korporacyjnych króluje Java, w nich też używa się czasem wirtualizacji np. VMWare Servera. Fajnie by było, gdyby pewne operacje na maszynach wirtualnych zautomatyzować za pomocą jakiegoś własnego oprogramowania. EMC dostarcza API VIX w wydaniach dla C i Perla, ale nie ma Java bindings. Chciałem coś takiego zrobić samemu, ale z Javy nie można tak łatwo dostać się do C jak w .NET-cie. Są biblioteki np. J/Invoke, ale są płatne i zamknięte. No to napisałem swoją własną biblioteczkę - pomysł jest taki, że pobieramy adres funkcji z biblioteki so, wrzucamy go do eax-a, wrzucamy argumenty na stos i wołamy eax-a. Tak, tak, używamy assemblera :). Okazuje się, że jak się ma fajne gcc pod Windows i zrobi parę makrodefinicji, to ten sam kod napisany pod Linuksa, da się skompilować i uruchamiać pod Windows. Całość wrzuciłem na systest.googlecode.com.

0 komentarze: