02.10.2013, 13:13
Hey,
also ich habe folgende Funktion:
[c]
static void call_user(PurpleBlistNode *node) {
PurpleAccount *acc = NULL;
PurpleConnection *gc = NULL;
PurplePlugin *prpl = NULL;
PurplePluginProtocolInfo *prpl_info = NULL;
PurpleNotifyUiOps *ops;
purple_debug_warning("plugin-call-a-buddy", "Variablen wurden initialisiert.\n");
const char *name = NULL;
PurpleBuddy *buddy = (PurpleBuddy*) node;
acc = purple_buddy_get_account(buddy);
purple_debug_warning("plugin-call-a-buddy", "Node Konvertiert und Acc geholt.\n");
gc = acc->gc;
purple_debug_warning("plugin-call-a-buddy", "GC wird geholt.\n");
if(!gc) {
return;
}
prpl = purple_connection_get_prpl(gc);
purple_debug_warning("plugin-call-a-buddy", "Hole Protocol.\n");
if(!prpl) {
return;
}
prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
purple_debug_warning("plugin-call-a-buddy", "Plugin_Protocol_INFO wird geholt. \n");
if(!prpl_info || !prpl_info->get_info) {
return;
}
ops = purple_notify_get_ui_ops();
purple_debug_warning("plugin-call-a-buddy", "Notify_Get_UI_Ops \n");
notify_userinfo_ori = ops->notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", (char*)*notify_userinfo_ori);
/*
* ops = purple_notify_get_ui_ops();
* notify_userinfo_ori = ops->notify_userinfo;
* ops->notify_userinfo = birthday_reminder_notify_userinfo;
*/
//Erstellt Funktionszeiger.
ops->notify_userinfo = call_a_buddy_notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", "Birthday_Reminder_Notify_Userinfo \n");
prpl_info->get_info(gc, name);
purple_debug_warning("plugin-call-a-buddy", "Entsprechende Infos werden ermittelt \n");
if(!PURPLE_BLIST_NODE_IS_BUDDY(node)) {
purple_debug_fatal("plugin-call-a-buddy", "Es wird versucht einen Nicht-User anzurufen.\n");
return;
}
test();
}
[/c]
In dieser wird der Zeiger umgebogen und auch die get_info aufgerufen.
Das hier ist die Funktion, die aufgerufen wird anstelle von displaying_userinfo..
[c]
static void *call_a_buddy_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) {
purple_debug_warning("plugin-call-a-buddy", "In der Funktion ..._notify_userinfo");
purple_debug_warning("plugin-call-a-buddy", who);
/* Info-Fenster unterdrücken */
return NULL;
}
[/c]
Wenn ich nun in Pidgin auf meinen Menü-Punkt klicke, bekomme ich folgende Ausgabe:
Das Plugin stürzt auch nicht mehr ab auch bei mehrfachem Aufruf.
also ich habe folgende Funktion:
[c]
static void call_user(PurpleBlistNode *node) {
PurpleAccount *acc = NULL;
PurpleConnection *gc = NULL;
PurplePlugin *prpl = NULL;
PurplePluginProtocolInfo *prpl_info = NULL;
PurpleNotifyUiOps *ops;
purple_debug_warning("plugin-call-a-buddy", "Variablen wurden initialisiert.\n");
const char *name = NULL;
PurpleBuddy *buddy = (PurpleBuddy*) node;
acc = purple_buddy_get_account(buddy);
purple_debug_warning("plugin-call-a-buddy", "Node Konvertiert und Acc geholt.\n");
gc = acc->gc;
purple_debug_warning("plugin-call-a-buddy", "GC wird geholt.\n");
if(!gc) {
return;
}
prpl = purple_connection_get_prpl(gc);
purple_debug_warning("plugin-call-a-buddy", "Hole Protocol.\n");
if(!prpl) {
return;
}
prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
purple_debug_warning("plugin-call-a-buddy", "Plugin_Protocol_INFO wird geholt. \n");
if(!prpl_info || !prpl_info->get_info) {
return;
}
ops = purple_notify_get_ui_ops();
purple_debug_warning("plugin-call-a-buddy", "Notify_Get_UI_Ops \n");
notify_userinfo_ori = ops->notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", (char*)*notify_userinfo_ori);
/*
* ops = purple_notify_get_ui_ops();
* notify_userinfo_ori = ops->notify_userinfo;
* ops->notify_userinfo = birthday_reminder_notify_userinfo;
*/
//Erstellt Funktionszeiger.
ops->notify_userinfo = call_a_buddy_notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", "Birthday_Reminder_Notify_Userinfo \n");
prpl_info->get_info(gc, name);
purple_debug_warning("plugin-call-a-buddy", "Entsprechende Infos werden ermittelt \n");
if(!PURPLE_BLIST_NODE_IS_BUDDY(node)) {
purple_debug_fatal("plugin-call-a-buddy", "Es wird versucht einen Nicht-User anzurufen.\n");
return;
}
test();
}
[/c]
In dieser wird der Zeiger umgebogen und auch die get_info aufgerufen.
Das hier ist die Funktion, die aufgerufen wird anstelle von displaying_userinfo..
[c]
static void *call_a_buddy_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) {
purple_debug_warning("plugin-call-a-buddy", "In der Funktion ..._notify_userinfo");
purple_debug_warning("plugin-call-a-buddy", who);
/* Info-Fenster unterdrücken */
return NULL;
}
[/c]
Wenn ich nun in Pidgin auf meinen Menü-Punkt klicke, bekomme ich folgende Ausgabe:
Zitat:(12:06:30) plugin-call-a-buddy: Node Konvertiert und Acc geholt.Wenn ich nun aber auf Info abrufen klicke, bekomme ich die Ausgabe, die in der Funktion generiert wird.
(12:06:30) plugin-call-a-buddy: GC wird geholt.
(12:06:30) plugin-call-a-buddy: Hole Protocol.
(12:06:30) plugin-call-a-buddy: Plugin_Protocol_INFO wird geholt.
(12:06:30) plugin-call-a-buddy: Entsprechende Infos werden ermittelt
(12:06:30) plugin-call-a-buddy: Notify_Get_UI_Ops
Das Plugin stürzt auch nicht mehr ab auch bei mehrfachem Aufruf.
Zitat:Kann man denn mit dem Visual Studio debuggen?Soweit ich weiß leider nicht.