Laden...

Teamspeak 3 SDK verwenden

Erstellt von TBR vor 12 Jahren Letzter Beitrag vor 12 Jahren 7.965 Views
T
TBR Themenstarter:in
154 Beiträge seit 2009
vor 12 Jahren
Teamspeak 3 SDK verwenden

Hallo,
ich hab mal eine kurze Frage:

Kann ich in eine C# App irgendwie das Teamspeak 3 SDK einbauen?
Das SDK ist ja nativ kompiliert. Ich vermute das "DllImport"-Verfahren kann man hier nicht anwenden, einen Wrapper gibts leider noch nicht und sonst?

Irgendwie muss man doch auf die Funktionen zugreifen können, oder nicht? Ich hab vor kurzem mal was gelesen, dass es dafür eine Loader-API von Windows gibt oder so, die man verwenden kann um die Funktionen zu suchen und zu Invoken ...

Aber gibts keine einfache Lösung?

Danke
TBR

A
350 Beiträge seit 2010
vor 12 Jahren

Hi,

in der SDK gibt es sogar Beispiele für die Nutzung in C#
Schau doch einfach mal da rein 😉

Grüße

T
TBR Themenstarter:in
154 Beiträge seit 2009
vor 12 Jahren

Ich hab zweimal geschaut, das waren irgendwie nur 4 Enums und ein Haufen vordefinierterer Dinge ... Aber kein Sample wie mans nutzt 😮

Ich hab noch nie mit nativen Libs gearbeitet - wie man sie verwendet usw. drum bin ich da jetz auch nich so helle wie das Sample funktioniert ...

Ich schaus mir nochmal an..

EDIT: Ok, ich versuchs mal. Werd schon irgendwie scheitern 😄

A
350 Beiträge seit 2010
vor 12 Jahren

Hi,

schau dir mal die callbacks.cs an, dort findest du zB die Events für die Serverkommunikation.
Im Ordner Server liegt alles für das hosten eiens Servers.

Solltest du dann noch konkrete Probleme haben, kannst du dich gerne hier melden 😃

Grüße

T
TBR Themenstarter:in
154 Beiträge seit 2009
vor 12 Jahren

Ich hab ein Problem. Ich hab das Sample mal übernommen, jedoch kommt beim Aufurf von:

            uint error = ts3client.ts3client_initClientLib(ref cbs, ref cbs_rare, LogTypes.LogType_FILE | LogTypes.LogType_CONSOLE, null);

Ein Fehler:> Fehlermeldung:

Die DLL "ts3client_win32.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.

Ich hab keinen Plan wieso, im Sample gehts auch ...

A
350 Beiträge seit 2010
vor 12 Jahren

liegt die DLL im Ausgabeverzeichniss der Assembly ?

T
TBR Themenstarter:in
154 Beiträge seit 2009
vor 12 Jahren

Ja im Gegensatz zum Sample - was das komische ist ...

643 Beiträge seit 2006
vor 12 Jahren
        [DllImport("kernel32.dll")]
        internal static extern IntPtr LoadLibrary(String dllname);

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool FreeLibrary(IntPtr hModule);

        [DllImport("kernel32.dll")]
        internal static extern IntPtr GetProcAddress(IntPtr hModule, String procname);

        internal delegate int MyFuncDelegate(int myParam);

        static void Main(string[] args)
        {
            //Modul laden
            IntPtr hModule = LoadLibrary("TeamSpeakLibraryPfad");
            //Funktions adresse bekommen
            IntPtr proc = GetProcAddress(hModule, "Funktionname");
            //Funktions addresse in delegate
            MyFuncDelegate meineNativeFunction = (MyFuncDelegate)
                Marshal.GetDelegateForFunctionPointer(proc, typeof(MyFuncDelegate));
            //Funktion aufrufen
            int retVal = meineNativeFunction.Invoke(123);
            //Modul entladen wenn nicht mehr gebraucht wird
            FreeLibrary(hModule);
        }
T
TBR Themenstarter:in
154 Beiträge seit 2009
vor 12 Jahren

Das sieht mir danach aus, dass es ziemlich einfach ist so mit TS zu arbeiten 😃

Ich werds mir mal anschauen, danke dir 😉