📄 module.c
字号:
//module.c
#include <gtk/gtk.h>
#include <gmodule.h>
typedef void (*About) (void);
typedef void (*Dialog) (gchar* message);
GModule *module;
void on_open(GtkWidget *button, gpointer data){ module = g_module_open("./libhello.so", 0); // G_MODULE_BIND_LAZY); if(module == NULL) g_error("ERROR:%s", g_module_error()); gtk_widget_set_sensitive(button, FALSE);}
void on_dialog(GtkWidget *button, gpointer data)
{ Dialog dialog;
if(g_module_symbol(module,"create_message_dialog",(gpointer*)&dialog)) { dialog("这是一个测试用的消息对话框。"); } else { g_error("ERROR:%s", g_module_error()); }
}
void on_about(GtkWidget *button, gpointer data)
{ About about;
if(g_module_symbol(module,"about",(gpointer*)&about)) { about(); }
else { g_error("ERROR:%s", g_module_error()); }
}
void on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){ g_module_close(module); gtk_main_quit();}
int main(int argc, char* argv[])
{
GtkWidget *window, *vbox, *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(on_delete_event),NULL);
gtk_container_set_border_width(GTK_CONTAINER(window),10);
vbox = gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(window),vbox); button = gtk_button_new_with_label("调用插件"); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(on_open), NULL); button = gtk_button_new_with_label("显示信息对话框");
gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,FALSE,0);
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(on_dialog),NULL);
button = gtk_button_new_with_label("显示关于对话框");
gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,FALSE,0);
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(on_about),NULL);
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -