Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TS3-Plugin Sourcecode für Delphi (https://www.delphipraxis.net/168722-ts3-plugin-sourcecode-fuer-delphi.html)

NickelM 6. Jun 2012 17:15


TS3-Plugin Sourcecode für Delphi
 
Liste der Anhänge anzeigen (Anzahl: 2)
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 :-D.

Viel Spass damit.

Gruß NickelM

blackfin 6. Jun 2012 17:18

AW: TS3-Plugin Sourcecode für Delphi
 
cool! danke :thumb:

jaenicke 7. Jun 2012 00:09

AW: TS3-Plugin Sourcecode für Delphi
 
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.

NickelM 24. Jun 2012 03:21

AW: TS3-Plugin Sourcecode für Delphi
 
- 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.

adfontes 14. Aug 2012 19:07

AW: TS3-Plugin Sourcecode für Delphi
 
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. :(

adfontes 16. Aug 2012 16:36

AW: TS3-Plugin Sourcecode für Delphi
 
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 :)

web-sat 30. Sep 2013 16:33

AW: TS3-Plugin Sourcecode für Delphi
 
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

ByTheTime 21. Jan 2014 15:41

AW: TS3-Plugin Sourcecode für Delphi
 
Wird der Thread noch geupdated? Oder ist er stillgelegt :( ?

web-sat 26. Mai 2014 22:00

AW: TS3-Plugin Sourcecode für Delphi
 
Hi,
warscheinlich ja schade :-( :pale:

himitsu 27. Mai 2014 14:00

AW: TS3-Plugin Sourcecode für Delphi
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.
Seite 1 von 2  1 2      

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