AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TS3-Plugin Sourcecode für Delphi

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 2 von 2     12
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)
 
mkinzler

 
Delphi 11 Alexandria
 
#11
  Alt 27. Mai 2014, 16:15
http://addons.teamspeak.com/director...or-Delphi.html
Markus Kinzler
  Mit Zitat antworten Zitat
Dennis07

 
Delphi 11 Alexandria
 
#12
  Alt 22. Mär 2023, 01:28
Dieser Thread ist ja schon uralt und ich weiß offen gesagt nicht, wer überhaupt noch so ein Projekt derzeit bearbeitet.

Ich wollte nur kurz ankündigen, dass ich gerade an einer komplett neuen Version arbeite. Diese wird mit der aktuellen API-Version kompatibel sein und einen Delphi-ähnlicheren Ansatz verfolgen. Ich arbeite daran derzeit in meiner Freizeit und werde es auf GitHub veröffentlichen.

Gibt es derzeit vielleicht irgendein Projekt, an dem ich alles mal testen könnte? Oder gibt es hier jemanden, der bereit ist, mir beim Testen der neuen Sourcen zu helfen?

Geplant ist derzeit eine komplett neu gewrappte API sowie ein Design-Package mit einem Setup-Wizard für Plugin-DLLs.
Wäre lieb, wenn mich jemand unterstützen könnte, indem er mir seine Test-Möglichkeiten anbietet. Danke!
Dennis
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:29 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