2011-01-24 14 views
5

Mam oprogramowanie w C++ MFC, które ma jakiś publiczny interfejs dla wtyczki za pomocą eksportu C.Najlepszy sposób implementacji wtyczki

Mam zamiar otworzyć oprogramowanie do programowania zewnętrznych stron trzecich. Ale używanie eksportu C jest dla programistów hardcore.

Jaki jest najlepszy sposób wdrożenia? Słyszałem o LUA, ale chcę wiedzieć o innych możliwościach.

Odpowiedz

0

Jeśli masz przykłady programowania eksportu C, które sprawdzają się w Twoim przypadku, sugeruję, abyś odłożył na bok swoje wymyślone "ostre" pojęcia, a Nike mówi "po prostu to zrób".

To może być łatwiejsze niż się spodziewałeś.

+0

Ale powinienem "przyciągnąć" Deweloperów do projektu. A dla Sure C Export nie są dla dzisiejszych deweloperów. – bratao

+0

Nawet jeśli jest wycięty i wklejony? –

3

Myślę, że to naprawdę zależy od rodzaju programu i grupy docelowej. WoW z pewnością nie miałby tylu dodatków, jak to wymagało, C i kompilatora do ich napisania. Ale na pewno nie chciałbym pisać dużego dodatku w Lua.

Przed wszystkim musisz zdecydować, czy chcesz używać języka skryptowego, czy też języka skompilowanego. Jeśli kierujesz uwagę na przypadkowych użytkowników, lepszym wyborem może być język skryptowy. Jeśli kierujesz ofertę do profesjonalnych programistów (powiedzmy, pakiet finansowy, którego dodatki są rozwijane przez programistów wewnętrznych), najlepiej będzie, jeśli skompilowany język będzie działał najlepiej.

Aha, a także - dlaczego nie zapytasz gromady potencjalnych deweloperów wtyczek?

+0

Dzięki za odpowiedź, ale oprogramowanie zostanie wydane w głównym nurcie jako wolne oprogramowanie. Więc nie mam jeszcze potencjalnych programistów wtyczek, ale chcę, aby rzeczy były jak najprostsze, aby je przyciągnąć. – bratao

+0

@bratao, jeśli nie masz żadnych programistów _yet_, a interfejs C jest już gotowy, to powiedziałbym, że najpierw wypuszczę, a potem zobaczę, ile jest popytu na inne środowiska wtyczek. –

0

Używamy C-nazewnictwo i rodzinę funkcji dlopen\LoadLibrary załadować wtyczki (.dll lub .so), znaleźć 3 potrzebnych metod The (create_plugin(), destroy_plugin() i get_type().

realizator jedynie plugin musi się upewnić, że ekwiwalent (w jakimkolwiek języku używają) jest visibile w bibliotece

extern "C" PLUGIN_API plugin_interface* create_plugin(arg_pack*); 
extern "C" PLUGIN_API void destroy_plugin(plugin_interface*); 
extern "C" PLUGIN_API const char* get_type(); 

w zależności od tego, co trzeba zrobić swoje wtyczki, arg_pack można zastąpić konkretnych argumentów.

Zapoznaj się z dokumentacją dla [gmodule][1], aby wyświetlić bibliotekę międzyplatformową do wykonywania tego typu zadań.

0

Realizacja interfejsu binarnego pomocą eksportowanych funkcji C, aby utworzyć i powrót interfejsów.

// your_plugin_header 

// Plugins must implement this interface 
struct PluginInterface { 
    virtual void Release()=0; 
    virtual void Method()=0; 
    virtual void Method2()=0; 
}; 


// Plugin dll's must export this function that creates a new object that implements 
// the PluginInterface; 
extern "C" bool CreatePluginObject(PluginInterface**); 

Następnie zaimplementuj przykładową wtyczkę jako mostek Lua/Javascript/Python i połącz ją z oprogramowaniem. Out box obsługuje zarówno mocno sprzężony interfejs C++, PLUS wysoce skryptowalny interfejs wtyczki, ORAZ, jeśli ktoś woli inny skrypt, mogą to zrobić samodzielnie.

Powiązane problemy