좀만 더 가자... 루비면 벌써 끝났을걸.. 한시간째 ㅠㅠ

자체 제작해서 GObject 교체할 거임!!! 진짜임!!!

c 언어로 인터페이스를 이렇게 만듦


typedef struct _Language Language;


struct _Language

{

    char * (* get_id) (Language *lang);

    int    (* filter) (Language *lang, int a);

};



#include "lang.h"
#include
#include
#include

char *kor_get_id ()
{
    return "kor";
}

int kor_filter (Language *lang, int a)
{
    return a * 10;
}

Language *language_new ()
{
    Language *kor;

    kor = malloc (sizeof (Language));
    kor->get_id = kor_get_id;
    kor->filter = kor_filter;

    return kor;
}



#include

#include

#include

#include "lang.h"


int language_filter (Language *lang, int a)

{

    if (lang->filter)

        return lang->filter (lang, a);


    return 0;

}


int main (int argc, char **argv)

{

    void     *lib;

    char     *errstr;

    Language *lang;


    Language * (* language_new) ();


    lib = dlopen ("./kor.so", RTLD_LAZY | RTLD_LOCAL);


    if (!lib)

    {

        printf ("%s\n", dlerror ());

        return 1;

    }


    language_new = dlsym (lib, "language_new");


    if ((errstr = dlerror ()))

    {

        printf ("%s\n", errstr);

        return 1;

    }


    lang = language_new ();


    printf ("%s\n", lang->get_id (lang) );

    printf ("%d\n", lang->filter (lang, 2));

    printf ("%d\n", language_filter (lang, 2));

    dlclose (lib);


    return 0;

}