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
Hi,
in der SDK gibt es sogar Beispiele für die Nutzung in C#
Schau doch einfach mal da rein 😉
Grüße
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 😄
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
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 ...
[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);
}
Das sieht mir danach aus, dass es ziemlich einfach ist so mit TS zu arbeiten 😃
Ich werds mir mal anschauen, danke dir 😉