AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TS3-Plugin Sourcecode für Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

TS3-Plugin Sourcecode für Delphi

Ein Thema von NickelM · begonnen am 6. Jun 2012 · letzter Beitrag vom 22. Mär 2023
Antwort Antwort
Seite 1 von 2  1 2      
NickelM
Registriert seit: 22. Jul 2007
Hallo zusammen,

Hiermit stelle ich den Sourcecode für das TS3-Client-Plugin System rein.
Es ist der kompatible Code für die Plugin-Version 16.

Hier ein Beispiel, wie soeine Projekt-Datei ausehen könnte.

- Update Plugin API zu Version 17
+ ts3_functions : Neue Plugin Funktionen : getClientDisplayName, getBookmarkList, getProfileList, guiConnect, guiConnectBookmark, createBookmark.
+ plugin_definitions : Neue Type für neue Plugin funktionen hinzugefügt.

Delphi-Quellcode:
library ts3_testplugin;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }



uses
  SysUtils,
  public_errors,
  public_errors_rare,
  public_definitions,
  public_rare_definitions,
  ts3_functions,
  plugin_definitions,
  plugin;

var ts3Func : TS3Functions;

const PLUGIN_API_VERSION = 17;

function ts3plugin_name() : PAnsiChar; cdecl;
begin
  //Der Name des Plugins
  Result := 'Mein erstes Plugin';
end;

function ts3plugin_version() : PAnsiChar; cdecl;
begin
  //Ein Versionsstring, von deinem Plugin.
  Result := '1.2';
end;

function ts3plugin_apiVersion() : Integer; cdecl;
begin
  //Nur oben Konstante ändern; NICHT HIER ÄNDER!
   Result := PLUGIN_API_VERSION;
end;

function ts3plugin_author() : PAnsiChar; cdecl;
begin
  //Der Authorname.
  Result := 'NickelM';
end;

function ts3plugin_description() : PAnsiChar; cdecl;
begin
  //Beschreibung des Plugins, falls du mehrer Zeilen haben willst, musst du
  //das denk ich mal so machen
  Result := PAnsiChar('Testplugin' + sLineBreak + 'Zweite Zeile des Plugins');
end;

procedure ts3plugin_setFunctionPointers(funcs : TS3Functions); cdecl;
begin
  //Wichtigste Funktion. Am besten nichts ändern
  ts3Func := funcs;
end;

function ts3plugin_init() : Integer; cdecl;
begin
  //Gebe hier den Code an, der beim Initalisieren der DLL ausgeführt wird.
  //Gib 0 zurück bei Erfolgreich.
  //Gib 1 zurück bei Fehlschlag.
  Result := 0;
end;

procedure ts3plugin_shutdown(); cdecl;
begin
  //Hier dein Code beim
end;

//Ab hier kommen die Funktionen, die in der Plugin.pas deklariert sind.
//Einfach aus der Plugin.pas hierhin kopieren und unten bei "exports" den
//Funktionsname einfügen.
function ts3plugin_onTextMessageEvent(serverConnectionHandlerID : uint64;
targetMode : anyID; toID : anyID; fromID : anyID; fromName : PAnsiChar;
fromUniqueIdentifier: PAnsiChar; message: PAnsiChar; ffIgnored : Integer) : Integer; cdecl;
var myID : anyID;
    toUI : PAnsiChar;
begin
   //Falls der TS3 Client die Message sowieso ignoriert.
   if Boolean(ffIgnored) then
  begin
     Result := 0; //Client will ignore the message anyways, so return value here doesn't matter */
    Exit;
  end;
  //Ab hier kommt ein Beispiel-Code
  //TargetMode ist die Msg-Art :
  //1 = PrivateMsg; Die anderen werden ServerMsg und ChannelMsg sein.
  //Was für ein Wert die haben, habe ich noch nicht getestet.
  if targetMode = 1 then
  begin
    //serverConnectionHandlerID ist sozusagen der der "Tab-Handle" zum Server.
    //Es ist sozusagen ein Handle zur Verbindung.

    //Eigene ID abrufen.
      ts3Func.getClientID(serverConnectionHandlerID, @myID);
    //Falls die FromID, also wovon die Msg kommt, ungleich der eigenen ist,
    //man will denk ich mal die eigenen Msg nicht wirklich überprüfen.
    if (fromID <> myID) then
    begin
      //Hier ein Code.
    end;
  end;
  //Wenn du fertig bist, oder auch zwischendurch, setze des Result
  //auf 0, das sie vom Client normal angezeigt, bzw. normal behandelt wird, also
  //falls du sagt, trotz deines Codes, soll der Client normal mit der Msg umgehen.
  //Bei 1 sagst du dem Client, er soll die Msg ignorieren, also nicht anzeigen.
  Result := 0;
end;

exports
//GANZ WICHTIG, ALLE FUNKTIONSNAMEN VON DEN PLUGIN-FUNKTIONEN HIER
//HINZUFÜGEN.
//Diese müssen aufjedenfall, in jedem Plugin sein...
ts3plugin_name, //<--
ts3plugin_version, //<--
ts3plugin_apiVersion,//<--
ts3plugin_author, //<--
ts3plugin_description,//<--
ts3plugin_setFunctionPointers,//<--
ts3plugin_init, //<--
ts3plugin_shutdown, //<--
//Ab hier kannst du die anderen Funktionen hinzufügen.
//Dies sind sogenannte Callback-Funktionen, also Events,
//die vom TS3-Client gesendet werden.
ts3plugin_onTextMessageEvent;

begin

end.
Im Anhang, die Rar-Datei mit allen Units, inklusive ein Bild, wie das Beispielplugin in TS3 angezeigt wird.

Wenn ihr fertig seit, geht ihr in Delphi auf Projekt->"Projektname" erzeugen.
Damit bekommt ihr eine DLL, die ihr dan ins TS3-Client Verzeichniss in den Ordner "plugins" kopiert.
Fertig. Der Code ist für eine 32bit DLL getestet worden, für einen 32bit TS3-Client. Ob dies für einen 64bit TS3-Client geht, weis ich nicht, da ich kein Delphi XE2, sowie kein 64bit Windows habe .

Viel Spass damit.

Gruß NickelM
Miniaturansicht angehängter Grafiken
ts3_plugin.png  
Angehängte Dateien
Dateityp: rar TS-Plugin Units.rar (17,8 KB, 111x aufgerufen)
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.

Geändert von NickelM (24. Jun 2012 um 07:46 Uhr)
 
blackfin
 
#2
  Alt 6. Jun 2012, 18:18
cool! danke
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

 
Delphi 11 Alexandria
 
#3
  Alt 7. Jun 2012, 01:09
Ja, es funktioniert auch ohne Änderungen mit XE2 und 64-Bit. Zumindest wird das Plugin geladen und taucht in der Liste der Plugins korrekt auf. Mehr habe ich nicht getestet.
Sebastian Jänicke
  Mit Zitat antworten Zitat
NickelM

 
Delphi 2009 Professional
 
#4
  Alt 24. Jun 2012, 04:21
- Update Plugin API zu Version 17
+ ts3_functions : Neue Plugin Funktionen : getClientDisplayName, getBookmarkList, getProfileList, guiConnect, guiConnectBookmark, createBookmark.
+ plugin_definitions : Neue Type für neue Plugin funktionen hinzugefügt.
Nickel
  Mit Zitat antworten Zitat
adfontes
 
#5
  Alt 14. Aug 2012, 20:07
Hi!

Also ich glaube ich mach da was falsch, wenns bei allen anderen ja scheinbar funktioniert.
Ich habe mir das Rar-Archiv runtergeladen, alle angegebenen pas Dateien dem Projekt hinzugefügt und bekomme einen - so wie ich finde - nachvollziehbaren Fehler.

in "plugin_definitions.pas" ab Zeile 45, da er "PluginBookmarkList" nochnicht kennt, aber wenn ich das "type PluginBookmarkList" oben drüber schiebe, dann fehlt halt hierin "PluginBookmarkItem"
Delphi-Quellcode:
type PPluginBookmarkList = ^PluginBookmarkList;
type PPPluginBookmarkList = ^PPluginBookmarkList;
type PluginBookmarkItem = packed record
   name : PAnsiChar;
   isFolder : Byte;
   reserved : array [0..2] of Byte;
   case Byte of
    0: (uuid : PAnsiChar);
    1: (folder : PPluginBookmarkList);
  end;

type PluginBookmarkList = packed record
   itemcount : Integer;
   items : array [0..0] of PluginBookmarkItem; //Weis nicht ob man so auf mehrer Items zugreifen kann
end;
Allerdings habe ich spontan keine Ahnung, wie ich das grundsätzlich korrigieren soll.
Wäre super, wenn mir jemand einen Tipp geben könnte, wie ihr das gelöst habt.
  Mit Zitat antworten Zitat
adfontes
 
#6
  Alt 16. Aug 2012, 17:36
Also ich habs jetzt schon mal soweit, dass es kompiliert, allerdings bringt mir der TS3 client noch immer einen Fehler beim laden der DLL (Plugin konnte nicht geladen werden:
Failed to open plugin.)

Ich gehe mal davon aus, dass das an einer falschen API Version liegt. Die Versionsnummer an sich ändern allein bringts leider noch nicht. Mal schaun ob ich das hinbekomme... ich wollte es hier nur noch mal posten, um meinen aktuellen Fortschritt festzuhalten, falls doch noch jemand das Thema interessiert und er meinen 1. Post liest
  Mit Zitat antworten Zitat
web-sat

 
Delphi 7 Enterprise
 
#7
  Alt 30. Sep 2013, 17:33
Hi,

Habe mal ne frage , gibt es schon für die API 19 Surcecode?
ich bekomme bei der abfrage von ts3Func.getClientID(serverConnectionHandlerID, @myID);

nur fehler meldungen unter anderem im Client "invalid clientID"

benutze D7

Besten dank im voraus
M.f.G
  Mit Zitat antworten Zitat
ByTheTime

 
Delphi XE2 Architect
 
#8
  Alt 21. Jan 2014, 16:41
Wird der Thread noch geupdated? Oder ist er stillgelegt ?
Lukas
  Mit Zitat antworten Zitat
web-sat

 
Delphi 7 Enterprise
 
#9
  Alt 26. Mai 2014, 23:00
Hi,
warscheinlich ja schade
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#10
  Alt 27. Mai 2014, 15:00
Vielleicht? (der User lebt ja noch, auch wenn er, hier im Forum, dieses Jahr nicht sehr aktiv war)

Ansonsten gibt es hier zum Glück den Quellcode, womit jeder das auch anpassen könnte.

Geändert von himitsu (27. Mai 2014 um 15:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz