Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Informationen des ausgewählten Users.
#21
Also, ich habe mal dir ganzes free()´s auskommentiert, kompiliert und eingefügt. Tadaaa es stürzt nicht mehr ab.
Ich bekomme folgende Ausgabe:
(14:49:47) plugin-call-a-buddy: Variablen wurden initialisiert.
(14:49:47) plugin-call-a-buddy: Node Konvertiert und Acc geholt.
(14:49:47) plugin-call-a-buddy: GC wird geholt.
(14:49:47) plugin-call-a-buddy: Hole Protocol.
(14:49:47) plugin-call-a-buddy: Plugin_Protocol_INFO wird geholt.
(14:49:47) plugin-call-a-buddy: Entsprechende Infos werden ermittelt
(14:49:47) plugin-call-a-buddy: Notify_Get_UI_Ops
(14:49:47) plugin-call-a-buddy: EDIT von Freakazoid: Trash entfernt
(14:49:52) plugin-call-a-buddy: Variablen wurden initialisiert.
(14:49:52) plugin-call-a-buddy: Node Konvertiert und Acc geholt.
(14:49:52) plugin-call-a-buddy: GC wird geholt.
(14:49:52) plugin-call-a-buddy: Hole Protocol.
(14:49:52) plugin-call-a-buddy: Plugin_Protocol_INFO wird geholt.
(14:49:52) plugin-call-a-buddy: Entsprechende Infos werden ermittelt
(14:49:52) plugin-call-a-buddy: Notify_Get_UI_Ops
(14:49:52) plugin-call-a-buddy: EDIT von Freakazoid: Trash entfernt
Zitieren
#22
Ich denke, du hattest die free()s eingebaut, weil es abstürzt? Aber ja, auf Verdacht free() einbauen führt zu mehr Problemen als das es löst. Wink Ein free() zu wenig führt "nur" zu unnötig erhöhtem Speicherverbrauch.

Die komischen Zeichen kommen übrigens, weil du einen Zeiger auf eine Funktion auf eine Zeichenkette castest und dann anzeigst. So etwas verrücktes geht unter C nicht, denn an der Stelle, wo der Zeiger hinzeigt steht ja nur Maschinencode und keine richtige Zeichenkette. Wink
Welche Pidgin-Version setzt du ein?
Welches Betriebssystem?
Was sagt das Debug-Fenster?

[Bild: pidginbanner.png]
Zitieren
#23
Guten Morgen,
ich hatte die free()s eingebaut, da das Plugin bei einer zweiten Ausführung immer abgestürzt ist.

Jetzt funktionieren auch mehrfache Ausführungen.

Zitat:Die komischen Zeichen kommen übrigens, weil du einen Zeiger auf eine Funktion auf eine Zeichenkette castest und dann anzeigst. So etwas verrücktes geht unter C nicht, denn an der Stelle, wo der Zeiger hinzeigt steht ja nur Maschinencode und keine richtige Zeichenkette. Wink

Zitat:[c]
notify_userinfo_ori = ops->notify_userinfo;
purple_debug_warning("plugin-call-a-buddy", (char*)notify_userinfo_ori);
[/c]
Wie kann ich dann das notify_userinfo_ori weiterverarbeiten? Das ist ein Zeiger, auf eine Zeichenkette, dann gibt es bestimmt eine Funktion, pointer_to_char oder so, oder?
Oder stehen in dem notify_userinfo_ori gar nicht die User-Infos?

Vielen Dank für deine Hilfe!
Zitieren
#24
also ich habe mir mal ein Kapitel zu Zeigern in C angeschaut. Dort steht drin, dass der Wert mit dem * zurückgegeben wird, also brauche ich [c]*notify_userinfo_ori[/c]
Dann bekomme ich aber folgendes:
Zitat: 2 IntelliSense: argument of type "void *(*)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info)" is incompatible with parameter of type "const char *" c:\local\dev\lokale_entwicklungen\james\trunc\pidgin-plugin\test-plugin\test.cpp 96 46 Test-Plugin

Wenn ich nun einfach mal folgendes probiere:
[c]
(char*)*notify_userinfo_ori
[/c]
Dann bekomme ich wieder diese Zeichen.
Ich weiß nun, dass [c]notify_userinfo_ori[/c] vom Typ [c]void *(*)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info)[/c] ist. Aber leider habe ich keine weiteren Informationen über diesen Dateityp. Ich weiß ja noch nicht mal, was das für ein Dateityp sein soll Smile

LG James
Zitieren
#25
Allsoooo:
Ich habe nun folgendes ermittelt:

[c]
ops->notify_userinfo = birthday_reminder_notify_userinfo;
purple_debug_warning("plugin-call-a-buddy", "Birthday_Reminder_Notify_Userinfo \n");
[/c]
Ist dafür verantwortlich, dass das Plugin(eher Pidgin) bei der zweiten Ausführung abstürzt.

Der Code ist so ziemlich der gleiche geblieben, falls du mehr Code brauchst... Big Grin
Zitieren
#26
Ich habe gerade keine Zeit, alles zu lesen (mache ich später, keine Sorge).

Aber eine Bitte habe ich: wenn du dir Speicher ausgeben lässt, indem keine Zeichenkette steht, und dabei Trash herauskommt, poste den Trash bitte nicht in's Forum. Du machst damit die RSS-Feeds kaputt (weswegen ich dir auf deine letzten Posts auch nicht antworten konnte Wink ). Ich habe deinen Text oben editiert, kannst du ja ggf. in Zukunft genauso machen.

PS: Ja ich weiß, dass das ein ordentlich programmiertes Forum eigentlich abkönnen müsste. Kann es aber nicht und ich habe gerade keine Zeit, mir das anzuschauen.
Welche Pidgin-Version setzt du ein?
Welches Betriebssystem?
Was sagt das Debug-Fenster?

[Bild: pidginbanner.png]
Zitieren
#27
Guten Morgen,
Oh, natürlich werde ich das nächste Mal den Trash einfach als "Trash" kennzeichnen Big Grin
Ach mach dir keinen Stress, sollte vielleicht kommuniziert werden, dann wird das keiner mehr machen Smile
Zitieren
#28
Der Typ [c]void *(*)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info)[/c] kennzeichnet einen Zeiger auf eine Funktion. Da sind keine Daten dahinter, die man irgendwie (sinnvoll) ausgeben kann, sondern das ist die Speicheradresse, an der der Programmcode steht, der aufgerufen wird, wenn das Protokollplugin die Nutzerinformationen zusammengesammelt hat. Das Besondere ist eben, dass man die Adresse ändern kann. Wenn du dort also mit [c]ops->notify_userinfo = birthday_reminder_notify_userinfo;[/c] die Adresse deiner Funktion hineinschreibt[1], wird beim nächsten Aufruf nicht die Funktion von Pidgin sondern deine eigene aufgerufen. Und die bekommt dann das [c]PurpleNotifyUserInfo *user_info[/c] übergeben, das du weiterverarbeiten kannst.

[1] Der Name einer Funktion ohne Klammern dahinter entspricht der Speicheradresse, an der der Programmcode der Funktion beginnt.
Welche Pidgin-Version setzt du ein?
Welches Betriebssystem?
Was sagt das Debug-Fenster?

[Bild: pidginbanner.png]
Zitieren
#29
Hey, danke für deine Hilfe, aber genau diese Zeile bereitet mir ja Probleme im Plugin...
Vielleicht habe ich was falsch gemacht?

[c]
static void *(*notify_userinfo_ori)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info);

ops = purple_notify_get_ui_ops();
purple_debug_warning("plugin-call-a-buddy", "Notify_Get_UI_Ops \n");

notify_userinfo_ori = ops->notify_userinfo;

...
ops->notify_userinfo = call_a_buddy_notify_userinfo;
[/c]

Siehst du da einen Fehler? Wenn nicht, muss ich mir das noch mal in Ruhe angucken Big Grin
Zitieren
#30
Gib mir bitte nochmal deinen aktuellen Stand. In den drei Zeilen ist alles in Ordnung und deinen alten Stand habe ich auf die Schnelle auch nichts gefunden.
Welche Pidgin-Version setzt du ein?
Welches Betriebssystem?
Was sagt das Debug-Fenster?

[Bild: pidginbanner.png]
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste