2012-01-23 12 views
15

Czy istnieje sposób wywołania funkcji dzielonej biblioteki C++ z poziomu wtyczki vim napisanej w vimscript?Wywołanie funkcji biblioteki C++ w vimscript

Powiedz, że istnieje hello_world.so, który ma funkcję hello_world(). Chcę wywołać tę funkcję za każdym razem, gdy użytkownik vim używa określonego powiązania klucza.

Odpowiedz

13

Tak można to zrobić, spróbuj: help libcall

Musisz wyeksportować funkcje jak undecorated funkcji C z "cdecl" konwencja wywoływania Podejrzewam:

Od vim pomoc:

W systemie Win32 pisane funkcje muszą znajdować się w bibliotece DLL i używać normalnej konwencji wywoływania C (nie pascal używany w systemie Windows systemowych bibliotek DLL). Funkcja musi przyjmować dokładnie jeden parametr, tj. Wskaźnik znaków lub długą liczbę całkowitą, i musi zwracać wskaźnik lub NULL. Zwrócony wskaźnik znaku musi wskazywać na pamięć , która pozostanie ważna po powrocie funkcji (np. W statycznych danych w bibliotece DLL). Jeśli wskazuje na przydzieloną pamięć, pamięć ta wycieknie. Użycie statycznego bufora w funkcji powinno zadziałać, to jest , a następnie zwalniane, gdy biblioteka DLL jest rozładowywana.

Istnieje przykład, jak to zrobić here.

+0

Dzięki! To pomaga. – Vamsi

+0

@Vamsi Można również napisać w rozszerzeniu C++ do Pythona, Perla lub innego podobnego języka, który obsługuje zarówno FFI (interfejs funkcji obcych) i jest obsługiwany przez samego Vima. Powinno być mniej skomplikowane, ponieważ rozszerzenia C++ dla Pythona są dużo bardziej powszechne niż rozszerzenia C++ dla vima, a jeśli coś się stanie, będziesz mógł uzyskać dodatkową pomoc. – ZyX