|
hello.c
- #include <gtk/gtk.h>
- void hello (void)
- {
- GtkWidget *dialog;
- dialog = gtk_message_dialog_new(NULL,
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
- "你好!\n这是动态链接库测试。");
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
- }
- void create_info_dialog(gchar* message)
- {
- GtkWidget *dialog;
- dialog = gtk_message_dialog_new(NULL,
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message);
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
- }
复制代码
main.c
- #include <gtk/gtk.h>
- #include <gmodule.h>
- typedef void (*simplehello) (void);
- typedef void (*simplefunc) (gchar *string);
- GModule *module;
- void on_button_test(GtkButton *button, gpointer data)
- {
- simplehello f1;
- simplefunc f2;
- if(g_module_supported())
- {
- gtk_button_set_label(button,"支持动态链接库");
- module = g_module_open("./libhello.so",G_MODULE_BIND_LAZY);
- g_module_symbol(module, "hello", (gpointer*)&f1);
- f1();
- g_module_symbol(module, "create_info_dialog",(gpointer*)&f2);
- f2("此对话框是从动态链接库调用出来的。");
- g_module_close(module);
- }
- else
- {
- gtk_button_set_label(button,"不支持动态库");
- }
- }
- int main(int argc, char* argv[])
- {
- GtkWidget *window, *button;
- gtk_init(&argc,&argv);
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window),"动态链接测试");
- g_signal_connect(G_OBJECT(window),"delete_event",
- G_CALLBACK(gtk_main_quit),NULL);
- gtk_window_set_default_size(GTK_WINDOW(window),200,40);
- gtk_container_set_border_width(GTK_CONTAINER(window),10);
- button = gtk_button_new_with_label("测试");
- g_signal_connect(G_OBJECT(button),"clicked",
- G_CALLBACK(on_button_test),NULL);
- gtk_container_add(GTK_CONTAINER(window),button);
- gtk_widget_show_all(window);
- gtk_main();
- return FALSE;
- }
复制代码
makefile
不好使,要自己分三次用。才行。
- CC = gcc
- all:
- $(CC) `pkg-config --cflags gtk+-2.0` -fPIC -DPIC -c hello.c -o hello.lo
- hello.lo:
- $(CC) `pkg-config --libs gtk+-2.0` -shared hello.lo -o libhello.so
- $(CC) main.c -o dll `pkg-config --cflags --libs gmodule-2.0 gtk+-2.0`
- clean:
- rm *.o *.lo *.a *.la .libs -fr
复制代码
大家写的代码这样累在一起才能更好的发挥,GTK的长处啊。 |
|